質問

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

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

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

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

およびIOExceptionが表示されます-ソースと宛先のパスは異なる必要があります。 Directory.Move()も同じ結果で試しました。

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

役に立ちましたか?

解決

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

var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");

他のヒント

ディレクトリの名前を temp に変更してから、再度 TEST に名前を変更するのはなぜですか?

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

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

次のextern宣言を使用:

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

大文字と小文字だけが名前が異なっていても、うまく機能します。名前が既に正確に指定されている場合、このように呼び出そうとしませんでした。

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

Windowsでのみ機能するという欠点があります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top