您的位置:首页 > 其它

System.IO.FileSystemWatcher与文件的打开状态

2007-09-26 18:49 369 查看
使用System.IO.FileSystemWatcher时,通常会想在检测到文件创建之后,扫描文件的内容,对之进行一定的处理。但是当我们的程序接到通知时,创建文件的进程可能还在写数据,这时如果想要打开这个文件会抛出异常。

似乎没有什么好办法来解决这个问题,除了最笨的一种:
FileSystemWatcher watcher = new FileSystemWatcher(directory, "*.txt");

watcher.NotifyFilter = NotifyFilters.FileName;

watcher.Created += FileCreated;

watcher.EnableRaisingEvents = true;

private void FileCreated(object sender, FileSystemEventArgs e)

{

while (!IsFileReady(e.FullPath))

{

if (!File.Exists(e.FullPath))

return;

Thread.Sleep(100);

}

//在这里进行文件处理。。。

}

bool IsFileReady(string filename)

{

FileInfo fi = new FileInfo(filename);

FileStream fs=null;

try

{

fs = fi.Open(FileMode.Open, FileAccess.ReadWrite,

FileShare.None);

return true;

}

catch(IOException)

{

return false;

}

finally

{

if(fs!=null)

fs.Close();

}

}
好在这个事件不是在主线程引发,所以线程等个几秒钟也不是太大的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: