5

どうやら、Directory.Move を使用して異なるボリューム上のファイルを移動することはできません。

各ファイルを個別に宛先にコピーしてから、ソースディレクトリを削除する必要があることを読みました。

他に選択肢はありますか?

4

4 に答える 4

6

Directory.Move (またはその他の関数) がボリューム間の移動を実行したかどうかに関係なく、基本的にはその下でコピーと削除を実行しています。したがって、速度の向上が必要な場合、それは実現しません。最善の解決策は、to および from パスからボリューム ラベル (C:,D:) を取得し、移動を実行するか、必要に応じてコピー + 削除する、独自の再利用可能な移動関数を作成することだと思います。

于 2008-12-18T16:49:02.600 に答える
4

私の知る限り、他に方法はありませんが、ディレクトリを削除することには問題があります。読み取り専用ファイルをUnauthorizedAccessException使用すると、ディレクトリとそのすべてのコンテンツを削除するときにが発生する可能性があります。

これにより、ディレクトリが再帰され、すべての読み取り専用フラグの設定が解除されます。前に電話してDirectory.Deleteください:

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);
    }
}
于 2008-12-18T16:58:11.113 に答える