我正在尝试将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);

有了这个外部声明:

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

只有在名称不同的情况下才能正常使用。当名称已完全按照指定时,我没有尝试过这样调用它。

这样做的好处是目录永远不会以其原始名称消失。

虽然它只适用于Windows,但它有缺点。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top