C# Directory.CreateDirectory延迟问题?

C# Directory.CreateDirectory延迟问题?,c#,.net,windows,directory,system.io.directory,C#,.net,Windows,Directory,System.io.directory,我正在尝试创建一个远程目录,然后向其中写入一个文件。每隔一段时间,应用程序在尝试写入文件时就会出现System.IO.DirectoryNotFoundException失败 当我编写文件时,我使用返回的DirectoryInfo对象来帮助创建文件路径,因此应用程序似乎认为目录已经创建。但是,该目录不存在 我是否有可能在Windows完成创建之前写入目录?我认为Directory.CreateDirectory在完成此任务之前不会返回。虽然我从未经历过这种行为,也无法解释它,但一个实用的解决方案

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

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


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

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


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

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

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


这个问题很严重,在其他平台上开发的文件密集型项目的开发人员从未理解过这个问题,并将其转移到Windows上:如DOS/CMD脚本、SVN客户端、Cygwin、perl、各种java应用程序、各种安装程序等。

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

if(!exportDirectory.Exists)
    exportDirectory.Create();
然后,当在另一个类中传递了相同的DirectoryInfo对象时,我执行以下操作:

if (!exportDirectory.Exists)
    throw new DirectoryNotFoundException(exportDirectory.FullName);
而且目录显然仍然不存在(尽管我在windows中打开了父目录,当然我可以看到它就在我面前)

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

exportDirectory.Refresh();
来自Microsoft:

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


我没有一个好的答案,但你没有说什么“远程”是必要的。因此,可能是远程服务器在本地文件系统上创建了文件夹,但在浏览时尚未返回。可能是缓存问题(是否会缓存文件系统结构?)。远程服务器是Windows服务器还是运行Samba或类似服务器的其他类型的服务器?它是AS400上的IFS共享。应用程序运行在Windows机箱上,通过UNC路径访问IFS共享。显然是IBM的错误。捕获异常并重试几次。检查
目录.Exists()
可能比捕获异常更有效,除非该异常错误地返回true,但访问它时抛出错误。@CoryCharlton:这怎么更有效?检查文件系统比抛出和检查异常要糟糕一个数量级,而且在这种情况下,文件系统可能也会执行Directory.Exists()。+1我们一直看到这一点,到目前为止,我们有一个完整的IO调用库,已针对NAS设置进行了调优。