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();
                }
            }
    好在这个事件不是在主线程引发,所以线程等个几秒钟也不是太大的问题。
  • 相关阅读:
    2016多校赛1 A 期望 B SG博弈,状压 D 倍增,二分
    POWOJ 1739: 魔术球问题 DAG最小路径覆盖转最大流
    Codeforces 743D 树形dp
    线性规划与网络流24题 索引
    WangEditor富文本编辑器的简单使用,并将文本数据发往后台
    SSRF
    关于Blind XXE
    blind xxe攻击
    linux awk命令详解
    kali
  • 原文地址:https://www.cnblogs.com/deerchao/p/907037.html
Copyright © 2011-2022 走看看