.NETで異なるボリューム上のファイルを移動します
-
22-08-2019 - |
質問
どうやら私はDirectory.Moveを使用して異なるボリューム上のファイルを移動することはできません。
私は私が先に個別に各ファイルをコピーする必要が読んだことが、その後、ソースディレクトリを削除します。
私は他のオプションを持っていますか?
解決
かどうかにかかわらずDirectory.Move(または任意の他の機能)のボリューム間の移動を行うことは、本質的にコピーを行うことと、とにかく下に削除することになります。あなたが高速化したいのであれば、それが起こることはないだろう。私は最善の解決策はボリュームラベル(Cになるだろうされ、独自の再利用可能な移動機能を記述することだと思う:、D :)からのパスへとから、その後、いずれかの移動を実行、または必要なときに削除+コピー
他のヒント
私の知る限りではしかし、ディレクトリを削除する他の方法はありませんキャッチを持っている:ディレクトリを削除するときUnauthorizedAccessExceptionのgreeveを起こすとそのすべての内容
可能性があるファイルのみを読みます public void removeReadOnlyDeep(string directory)
{
string[] files = Directory.GetFiles(directory);
foreach (string file in files)
{
FileAttributes attributes = File.GetAttributes(file);
if ((attributes & FileAttributes.ReadOnly) != 0)
{
File.SetAttributes(file, ~FileAttributes.ReadOnly);
}
}
string[] dirs = Directory.GetDirectories(directory);
foreach (string dir in dirs)
{
removeReadOnlyDeep(dir);
}
}
これは、ディレクトリを再帰的、すべての読み取り専用のフラグの設定が解除されます。 Directory.Delete前に呼び出します。)
簡単にオプションがMicrosoft.VisualBasic
名前空間への参照を追加し、ボリューム間で移動することができますMoveDirectory
メソッドを使用する、でしょう。
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(sourceDirName, destDirName);
これを使用してみてください。
public static void RobustMove(string sourceDirectory, string destDirectory)
{
//move if directories are on the same volume
if (Path.GetPathRoot(source) == Path.GetPathRoot(destination))
{
Directory.Move(source, destination);
}
else
{
CopyDirectoryRecursive(source, destination);
Directory.Delete(source, true);
}
}
現在のページを見つけるだろう>:
このは、使用するまで作業しなければならない<のhref = "http://lifehacker.com/5986883/how-to-combine-multiple-hard-drives-into-one-volume-for-cheap-high-capacity -storage」REL = "nofollowをnoreferrer">ボリュームをスパンまたはシンボルは、別の物理ディスクにリンクします。
あなたはSystem.IO .Exceptionがスローされるまでの移動を使用するには、この機能を向上させることができ、その後、コピーや削除に切り替えるには、より堅牢に。