10

C#のディレクトリの名前を、大文字と小文字が異なる場合にのみ同じ名前に変更しようとしています。

例:f:\ testからf:\ TEST

私はこのコードを試しました:

var directory = new DirectoryInfo("f:\\test");
directory.MoveTo("f:\\TEST");

IOExceptionが発生します-送信元パスと宛先パスは異なっている必要があります。Directory.Move()も試しましたが、同じ結果になりました。

これはどのように行われますか?別の一時ディレクトリを作成し、含まれているファイルを元のディレクトリから一時ディレクトリに移動してから、元のディレクトリを削除して、一時ディレクトリの名前を変更する必要がありますか?

4

4 に答える 4

11

別のディレクトリを作成してすべてを移動する必要はありません。フォルダの名前を別の名前に変更してから、目的の名前に戻します。

var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");
于 2009-10-26T00:32:37.813 に答える
4

名前が同じ場合に .NET メソッドDirectoryInfo.MoveToが例外をスローする場合でも、次のMoveFileように Windows API 関数を呼び出して、ディレクトリ名の大文字と小文字を設定できます。

bool success = MoveFile(dirInfo.FullName, dirInfo.FullName);

この extern 宣言では:

[DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);

大文字と小文字のみが異なる場合、私にとっては問題なく機能します。名前がすでに正確に指定されている場合、このように呼び出してみたことはありません。

これには、ディレクトリが元の名前で消えることがないという利点があります。

ただし、Windowsでしか機能しないという欠点があります。

于 2016-08-10T22:15:00.970 に答える
1

ディレクトリのtemp名前を変更してから、もう一度名前を変更してみませんTESTか?

于 2009-10-26T00:31:59.050 に答える
0

この場合、答えは「はい」です。ファイルシステム自体は、この2つを異なるものとは見なさないため、削除して新しい名前として追加する必要があります(または、提案したように移動/削除/移動)。

于 2009-10-26T00:29:24.587 に答える