c# - FileSystemWatcher - 文件是否准备好使用

标签 c# .net filesystemwatcher

当一个文件正在复制到file watcher文件夹时,如何判断文件是否复制完整并可以使用?因为我在文件复制期间收到多个事件。 (该文件是通过另一个程序使用 File.Copy 复制的。)

最佳答案

当我遇到这个问题时,我想出的最好的解决办法是不断地尝试获取文件的独占锁;在写入文件时,锁定尝试将失败,本质上是 this 中的方法回答。一旦文件不再被写入,锁定就会成功。

不幸的是,做到这一点的唯一方法是在打开文件时使用 try/catch,这让我感到畏缩——不得不使用 try/catch 总是很痛苦。不过,似乎没有任何解决办法,所以这就是我最终使用的方法。

修改那个答案中的代码就可以了,所以我最终使用了这样的东西:

private void WaitForFile(FileInfo file)
{
    FileStream stream = null;
    bool FileReady = false;
    while(!FileReady)
    {
        try
        {
            using(stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None)) 
            { 
                FileReady = true; 
            }
        }
        catch (IOException)
        {
            //File isn't ready yet, so we need to keep on waiting until it is.
        }
        //We'll want to wait a bit between polls, if the file isn't ready.
        if(!FileReady) Thread.Sleep(1000);
    }
}

关于c# - FileSystemWatcher - 文件是否准备好使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268067/

相关文章:

.net - 安装 IE 10 后,WebBrowser 控件不会在双击时自动选择文本

.net - System.Web.Mvc 与 Microsoft.Web.Mvc

.net - 从哪里获得 .net 的 apache poi 端口

c# - 用c#开发一个窗口的服务,用于将4个不同位置的数据备份到一个位置?

c# - 在 Windows Phone 7 上禁用屏幕自动锁定

c# - 在没有 System.Security.Cryptography 的情况下计算 SHA256 哈希

c# - 如何检查字符串是否包含一定数量的字母和数字 C#

c# - 在不提示用户的情况下选择 AutoCAD 中的整个图形

shell - 基于包含的文件内容的目录的上次更改时间?

在 Windows 上观看 PHP 文件夹