重命名具有相同名称的目录不同的情况

我试图将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在名称相同时抛出exception,也可以像这样调用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,但它有一个缺点。

在这种情况下答案是肯定的 – 文件系统本身并不会将两者视为不同,因此您需要删除并添加新名称(或按照建议移动/删除/移动)