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);

使用这个外部声明:

[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

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

于 2009-10-26T00:29:24.587 回答