-1

当文件存在时,以下过程保持等待。我可能犯了一个错误,但我不明白在哪里。

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);

你能帮助我吗?

4

2 回答 2

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) {}

如果文件上存在锁,要么等待其所有者释放它,要么将文件放入队列并稍后重试。

于 2013-08-14T09:55:01.457 回答
0

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

System.IO.WaitForChangedResult result;
seeTransFile.Path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
seeTransFile.Filter = fileName + @".md5";
result = seeTransFile.WaitForChanged(System.IO.WatcherChangeTypes.Created);
于 2013-08-14T09:58:37.680 回答