微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Directory.CreateDirectory延迟问题?

我试图创build一个远程目录,然后写一个文件。 每一个很棒的一次,应用程序尝试写入文件时失败了一个System.IO.DirectoryNotFoundException。

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

在Windows完成创build之前,是否有机会尝试写入目录? 我会认为Directory.CreateDirectory不会返回,直到这个任务完成。

在Windows 10上避免使用Convert.Todouble('Infinity')的FormatException

强制Windows在closures时等待服务停止

Windbg可以显示线程名称吗?

在.NET 4.5中编写的软件需要什么版本的.NET运行时?

C#窗体不呈现控件

在linux服务上处理kill – .NET Core 1.1

以编程方式将Microsoft Print中的文件名和path设置为PDF打印机

当X509Certificate2对象的智能卡被移除时的事件

如何检测SD卡何时插入?

WCF wsHttpBinding的Windows身份validation有多安全?

答案 – 是的。 预计文件/目录创建滞后时的行为。 其他评论者提出的普通解决方案是使用重试一段时间。 无论使用什么文件函数,其行为都是相同的: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();

来自微软:

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

虽然我从来没有经历过这种行为,也无法解释,但一个实用的解决方案是围绕访问目录的呼叫建立一个循环。 在该循环内捕获DirectoryNotFoundException,并在每次短暂暂停后重试访问几次。 如果超过重试次数,则重新发起异常。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐