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) 
                { 
                    // 档案建立后要做的事 
                } 
            } 
        } 
    }
  • 相关阅读:
    lombok注解详细介绍
    基于注解的SpringMVC大致开发流程
    Thymeleaf知识点总结
    thymeleaf相关知识
    Windows 命令行查看占用端口,并关闭操作
    身份证号码的正则表达式及验证详解
    mysql的查询过程和SQL语句优化
    MySQL数据库知识点整理
    MySQL数据库
    MySQL数据库
  • 原文地址:https://www.cnblogs.com/clark159/p/2205001.html
Copyright © 2011-2022 走看看