FileSystemWatcher等待

时间:2013-08-14 09:41:33

标签: c# filesystemwatcher

当文件存在时,以下过程仍在等待。 我可能犯了一个错误,但我不知道在哪里。

System.IO.WaitForChangedResult result;
seeTransFile.WaitForChanged(System.IO.WatcherChangeTypes.Created);
string seeDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
System.IO.FileSystemWatcher watcher = new FileSystemWatcher(SynDir, fileName + @".md5");
result = watcher.WaitForChanged(System.IO.WatcherChangeTypes.Created);

你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

FileSystemWatcher仅在创建/更改文件时触发。现有文件将被忽略。

首先启动FileSystemWatcher,然后使用Directory.GetFiles获取现有文件。

如果您需要读取FileSystemWatcher检测到的文件内容,我建议您使用以下代码验证文件的所有者是否已释放其上的所有锁:

try 
{
    // Attempts to open then close the file in RW mode, denying other users to place any locks.
    FileStream fs = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    fs.Close();
    fileClosed = true; // success
}
catch (IOException) {}

如果文件上存在锁定,请等待其所有者释放该锁定,或者将该文件放在队列中并稍后重试。

答案 1 :(得分:0)

因为您已经添加了FileSystemWatcher组件,所以将其配置为如下所示。删除其他代码行

System.IO.WaitForChangedResult result;
seeTransFile.Path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
seeTransFile.Filter = fileName + @".md5";
result = seeTransFile.WaitForChanged(System.IO.WatcherChangeTypes.Created);