Directory.CreateDirectory延迟问题?

时间:2010-02-08 23:09:09

标签: c# .net windows directory system.io.directory

我正在尝试创建一个远程目录,然后将文件写入其中。每隔一段时间,在尝试编写文件时,应用程序会因System.IO.DirectoryNotFoundException而失败。

当我编写文件时,我正在使用返回的DirectoryInfo对象来帮助创建文件路径,因此应用程序似乎认为该目录已经创建。但是,该目录不存在。

在Windows完成创建之前,我是否有可能尝试写入目录?我认为Directory.CreateDirectory在此任务完成之前不会返回。

3 个答案:

答案 0 :(得分:8)

答案 - 是的。当文件/目录创建滞后时的行为是预期的。其他评论者提出的普通解决方案是使用具有一些超时的重试。无论使用什么文件函数,行为都是相同的:Findfirst,CreateFile,WaitForSingleObject等。

另一个解决方案是使用Vista和更高版本Windows操作系统上的API新事务功能。

问题是令人讨厌的,开发人员从未理解在其他平台上制作的文件密集型项目并转移到Windows:如DOS / CMD脚本,SVN客户端,Cygwin,perl,各种Java应用程序,各种安装程序等。

答案 1 :(得分:6)

我刚遇到这个问题,对我来说情况是这样的:

if(!exportDirectory.Exists)
    exportDirectory.Create();

然后在另一个将相同 DirectoryInfo对象传递给它的类中,我做了一个:

if (!exportDirectory.Exists)
    throw new DirectoryNotFoundException(exportDirectory.FullName);

目录显然仍然不存在(虽然我在Windows中打开了父目录,当然我可以在我面前看到它)。

我找到的解决方案是在初始创建我应该调用的目录之后:

exportDirectory.Refresh();

来自Microsoft:

  

刷新对象的状态。 (继承自FileSystemInfo。)

答案 2 :(得分:4)

虽然我从未经历过这种行为并且无法解释,但实用的解决方案是围绕访问目录的呼叫设置循环。在该循环中捕获DirectoryNotFoundException,并在每次短暂暂停后重试访问几次。如果超出重试计数,则重新抛出异常。

此时添加详细日志记录可帮助您确定问题的实际原因。