zoukankan      html  css  js  c++  java
  • System.IO.FileSystemWatcher与文件的打开状态

    使用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();
                }
            }
    好在这个事件不是在主线程引发,所以线程等个几秒钟也不是太大的问题。
  • 相关阅读:
    学习Node.js笔记(一)
    HTML5的新特性及技巧分享总结
    前端切图的一些笔记(整理的有点乱)
    聊一聊前端速度统计(性能统计)那些事儿(转)
    jQuery中的checkbox问题
    随笔记录
    pillow模块快速学习
    Git学习及使用
    网站(陆续更新)
    ggplot笔记001——ggplot2安装
  • 原文地址:https://www.cnblogs.com/deerchao/p/907037.html
Copyright © 2011-2022 走看看