重命名具有相同名称的目录不同的情况
我试图将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,但它有一个缺点。
在这种情况下答案是肯定的 – 文件系统本身并不会将两者视为不同,因此您需要删除并添加新名称(或按照建议移动/删除/移动)