zoukankan      html  css  js  c++  java
  • [.NET] : 如何监看档案建立完毕

    前言 :

    一般在监控文件夹或是档案异动,大多使用FileSystemWatcher类别
    但FileSystemWatcher在监控档案建立的事件时
    他发出的 Created事件的时间点,是在档案建立开始的当时,而不是档案建立完毕的时间点。
    如果直接使用的话,有时会造成建立档案的线程跟监控档案的线程互相冲突
    造成『由于另一个进程正在使用档案』的例外产生。

    改为本篇文章介绍的使用方法及可避免上述问题

    实作 :

    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using System.IO; 
     
    namespace ConsoleApplication1 
    { 
        public class SampleFolderWatcher 
        { 
            // Properties  
            private string _folderPath = null; 
     
            private FileSystemWatcher _watcher = null; 
     
            private List<string> _creatingFiles = new List<string>(); 
     
     
            // Construction 
            public SampleFolderWatcher(string folderPath) 
            { 
                Require#region Require 
     
                if (folderPath == null) throw new ArgumentNullException(); 
     
                #endregion 
     
                _folderPath = folderPath; 
     
                _watcher = new FileSystemWatcher(); 
                _watcher.Path = _folderPath; 
                _watcher.Created += new FileSystemEventHandler(FileSystemWatcher_Creating); 
                _watcher.Changed += new FileSystemEventHandler(FileSystemWatcher_Changed); 
                _watcher.EnableRaisingEvents = true; 
            } 
     
     
            // FileSystemWatcher Events 
            private void FileSystemWatcher_Creating(object sender, FileSystemEventArgs e) 
            { 
                if (File.Exists(e.FullPath) == true) 
                { 
                    if (_creatingFiles.Contains(e.FullPath) == true) 
                    { 
                        _creatingFiles.Remove(e.FullPath); 
                    } 
                    _creatingFiles.Add(e.FullPath); 
                } 
            } 
     
            private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e) 
            { 
                if (File.Exists(e.FullPath) == true) 
                { 
                    if (_creatingFiles.Contains(e.FullPath) == true) 
                    { 
                        try 
                        { 
                            FileStream stream = File.OpenWrite(e.FullPath); 
                            stream.Close(); 
     
                            _creatingFiles.Remove(e.FullPath); 
     
                            FileSystemWatcher_Created(sender, new FileSystemEventArgs(WatcherChangeTypes.Created, Path.GetDirectoryName(e.FullPath), Path.GetFileName(e.FullPath))); 
                        } 
                        catch 
                        { 
     
                        } 
                    } 
                } 
            } 
     
            private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e) 
            { 
                if (File.Exists(e.FullPath) == true) 
                { 
                    // 档案建立后要做的事 
                } 
            } 
        } 
    }
  • 相关阅读:
    探秘小程序(9):父页面与自定义组件交互
    探秘小程序(8):scroll-view组件
    探秘小程序(7):view组件
    探秘小程序(6):微信支付
    探秘小程序(5):用户信息
    通向全栈之路(6)—无密码ssh连接
    探秘小程序(4):授权
    探秘小程序(3):登录
    探秘小程序(2):自定义组件
    [Python]json对象转换出错expected string or buffer python
  • 原文地址:https://www.cnblogs.com/clark159/p/2205001.html
Copyright © 2011-2022 走看看