diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2016-12-07 22:43:05 -0500 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2016-12-07 22:43:05 -0500 |
commit | ae44f17205961116baef018bae0b8fe9196b27f0 (patch) | |
tree | cc4bde5ebfec071ad2dd3f60db0b78bcc39a1602 /src/StardewModdingAPI.Installer/InteractiveInstaller.cs | |
parent | 860ccb90f790807c0f551e10dfff3ae03279d965 (diff) | |
download | SMAPI-ae44f17205961116baef018bae0b8fe9196b27f0.tar.gz SMAPI-ae44f17205961116baef018bae0b8fe9196b27f0.tar.bz2 SMAPI-ae44f17205961116baef018bae0b8fe9196b27f0.zip |
fix installer not moving mods out of appdata if the game isn't installed on the same Windows partition (#184)
Diffstat (limited to 'src/StardewModdingAPI.Installer/InteractiveInstaller.cs')
-rw-r--r-- | src/StardewModdingAPI.Installer/InteractiveInstaller.cs | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/StardewModdingAPI.Installer/InteractiveInstaller.cs b/src/StardewModdingAPI.Installer/InteractiveInstaller.cs index cfd64458..ffdef37b 100644 --- a/src/StardewModdingAPI.Installer/InteractiveInstaller.cs +++ b/src/StardewModdingAPI.Installer/InteractiveInstaller.cs @@ -406,10 +406,7 @@ namespace StardewModdingApi.Installer // move into mods this.PrintDebug($" Moving {entry.Name} into the game's mod directory..."); - if (isDir) - (entry as DirectoryInfo).MoveTo(newPath); - else - (entry as FileInfo).MoveTo(newPath); + this.Move(entry, newPath); } // delete if empty @@ -421,5 +418,32 @@ namespace StardewModdingApi.Installer modDir.Delete(); } } + + /// <summary>Move a filesystem entry to a new parent directory.</summary> + /// <param name="entry">The filesystem entry to move.</param> + /// <param name="newPath">The destination path.</param> + /// <remarks>We can't use <see cref="FileInfo.MoveTo"/> or <see cref="DirectoryInfo.MoveTo"/>, because those don't work across partitions.</remarks> + private void Move(FileSystemInfo entry, string newPath) + { + // file + if (entry is FileInfo) + { + FileInfo file = (FileInfo)entry; + file.CopyTo(newPath); + file.Delete(); + } + + // directory + else + { + Directory.CreateDirectory(newPath); + + DirectoryInfo directory = (DirectoryInfo)entry; + foreach (FileSystemInfo child in directory.EnumerateFileSystemInfos()) + this.Move(child, Path.Combine(newPath, child.Name)); + + directory.Delete(); + } + } } } |