I am trying to rename a directory in c# to a name that is the same only with differing case.
For example: f:\test to f:\TEST
I have tried this code:
var directory = new DirectoryInfo("f:\\test");
directory.MoveTo("f:\\TEST");
and I get a IOException - Source and destination path must be different. I have also tried Directory.Move() with the same result.
How is this done? Do I have to create a separate temp directory, move the contained files from the original directory to the temp directory, and then delete the original, and rename the temp directory?
Even if the .NET method DirectoryInfo.MoveTo
throws an exception if the name is the same, you can call the Windows API MoveFile
function like this to set the casing of the directory name:
bool success = MoveFile(dirInfo.FullName, dirInfo.FullName);
With this extern declaration:
[DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);
It works fine for me when the name differs in case only. I haven't tried calling it like this when the name is already exactly as specified.
This has the advantage that the directory never disappears under its original name.
It has the disadvantage though that it only works on Windows.
Well, you don't need to create a separate directory and move everything. Just rename the folder to something different and then back to the name you want:
var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");
Why not rename the directory temp
and then rename again to TEST
?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With