C# 正在等待在C中创建文件#

C# 正在等待在C中创建文件#,c#,file-io,C#,File Io,是否有一种内置方法用于等待在c#中创建文件?等待一个文件被完全写入怎么样 我反复尝试对文件执行File.OpenRead(),直到成功(超时失败),这是我自己的做法,但对文件进行旋转似乎不是正确的做法。我猜在.NET中有一个烘焙的方法来实现这一点,但我找不到它。使用FileSystemWatcher组件怎么样 此类“监视”给定的目录或文件,并可在发生某些事情(您可以定义发生了什么)时引发事件。可在文件被创建、删除、更新、属性更改等时通知您。它将解决您等待创建该文件的第一个问题 至于等待它被写入,

是否有一种内置方法用于等待在c#中创建文件?等待一个文件被完全写入怎么样


我反复尝试对文件执行File.OpenRead(),直到成功(超时失败),这是我自己的做法,但对文件进行旋转似乎不是正确的做法。我猜在.NET中有一个烘焙的方法来实现这一点,但我找不到它。

使用FileSystemWatcher组件怎么样

此类“监视”给定的目录或文件,并可在发生某些事情(您可以定义发生了什么)时引发事件。

可在文件被创建、删除、更新、属性更改等时通知您。它将解决您等待创建该文件的第一个问题


至于等待它被写入,当一个文件被创建时,你可以剥离并开始跟踪它的大小,等待它停止更新,然后添加一个固定的时间段,您也可以尝试获取独占锁,但如果其他进程也尝试锁定文件,请小心锁定该文件…您可能会导致意外情况发生。

FileSysWatcher无法监视网络路径。在这种情况下,您必须手动“爬网”目录中的文件——这可能会导致上述用户错误


是否有其他方法,以确保在文件完全写入磁盘并关闭之前不会打开该文件?

使用
文件创建文件时。创建
您可以调用
关闭
功能。
像这样:

File.Create(savePath).Close();

请注意FileSystemWatcher—我发现FileSystemWatcher在连接不牢固的网络上安装驱动器时,如果试图使用它,可能会失败。基本上,当连接丢失并重新建立时,观察者不再识别更改。只有我的两分钱。它也不适用于Novell Networks。至少1.1不适用。我使用的“dumb but works”方法(跨网络路径)是将thread.sleep()放在一个监视大小的循环中。检查文件。如果不存在,则继续睡眠,如果存在,则再次检查大小和睡眠。如果下次大小相同,那么退出,如果没有,再睡觉。我正在查看15-20Mb的文件,并在其间睡眠5分钟…这是过度的,但由于这是一夜之间,所以没有影响。它不是很聪明,但还没有失败。即使在上面的代码之后,我们需要延迟,否则它将进一步失败。所以我的问题是:如果File.Create(filePath)是sync方法,为什么要放置wait?