【问题标题】:Directory.CreateDirectory does not always create the folderDirectory.CreateDirectory 并不总是创建文件夹
【发布时间】:2015-11-22 07:51:59
【问题描述】:

我在路径C:\Users\MYUSER\Desktop\TEST\ 上创建了一个文件夹。

我有以下代码:

private const string DIR = @"C:\Users\MYUSER\Desktop\TEST\tmp";

static void Main(string[] args)
{
    if (Directory.Exists(DIR))
        Directory.Delete(DIR);

    for (int i = 0; i < 100; i++)
    {
        var dinfo = Directory.CreateDirectory(DIR);
        Directory.Delete(DIR);
    }

    Directory.CreateDirectory(DIR);
}

当我执行代码时,大多数情况下它运行正常,我可以看到文件夹TEST 中有一个文件夹 tmp。

我的问题是,在其他时候,Directory.CreateDirectory(DIR) 根本不创建目录。我什至检查了它返回的DirectoryInfo,它的Exists 属性是false,而Directory.CreateDirectory(DIR) 将不起作用,因为该文件夹不存在。这种奇怪的行为有什么解释吗?

【问题讨论】:

  • 在 NTFS 上,您必须拥有这样做的权限。
  • 这种代码有真正的原因还是只是为了测试?
  • 您确定没有遇到异常吗?目录是空的吗?
  • 目录是否在另一个程序中打开,例如Windows 资源管理器?
  • 我认为目录必须为空才能使 Directory.Delete 工作。但问题可能是在调用 CreateDirectory 行之前 Windows 尚未完成删除 DIR 目录。所以你需要以某种方式等待它完成。有很多方法可以做到这一点,但为了简单起见,在 Create 和 Delete 之间放置一个 Thread.Sleep ,我敢打赌它每次都有效。

标签: c# .net io directory


【解决方案1】:

遇到了同样的问题。没有发生错误,但根本不会创建文件夹。刚刚发现了问题的根源和简单的解决方法。

我有类似的东西:

Directory.CreateDirectory("/Users/MyAccount/NewFolder");
#Some code...
Directory.CreateDirectory("/Users/MyAccount/NewFolder/SubFolder");

这将无法在之前创建的目录下创建文件夹。

解决方案:在路径末尾添加一个斜杠。

代替:

Directory.CreateDirectory("/Users/MyAccount/NewFolder/SubFolder");

做:

Directory.CreateDirectory("/Users/MyAccount/NewFolder/SubFolder/");

添加尾部斜杠解决了这个问题,现在它 100% 的时间创建了文件夹。没有更多问题了。

【讨论】:

  • 这对我不起作用。问题仍然存在。
  • 这似乎是随机的。由于文件系统只queues一个要删除的目录,尝试在queuing它之后立即创建它以进行删除可能会成功,但该目录将在伪之后立即被删除创作。
  • 我确认 Directory.CreateDirectory 的行为在调用 Directory.DeleteDirectory 后完全不一致
猜你喜欢
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2018-03-22
相关资源
最近更新 更多