zoukankan      html  css  js  c++  java
  • 【.Net 学习系列】-- FileSystemWatcher 监控文件夹新生成文件,并在确认文件没有被其他程序占用后将其移动到指定文件夹

    监控文件夹测试程序:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.IO;
     4 using System.Linq;
     5 using System.Text;
     6 using System.Threading;
     7 using System.Threading.Tasks;
     8 
     9 namespace FileSystemWatcherTest
    10 {
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             FileSystemWatcher watcher = new FileSystemWatcher("C:\FileSystemWatcher", "*.txt");
    16             watcher.NotifyFilter = NotifyFilters.FileName;
    17             watcher.Created += new FileSystemEventHandler(FileCreated);
    18             watcher.EnableRaisingEvents = true;
    19 
    20             Console.ReadLine();
    21         }
    22 
    23         private static void FileCreated(object sender, FileSystemEventArgs e)
    24         {
    25             if (!File.Exists(e.FullPath))
    26             {
    27                 return;
    28             }
    29             Console.WriteLine("Created: {0: HH:mm:ss}", DateTime.Now);
    30 
    31             while (!IsFileReady(e.FullPath))
    32             {
    33                 Console.WriteLine("Used: {0: HH:mm:ss}", DateTime.Now);
    34             }
    35             //在这里进行文件处理。。。  
    36             Console.WriteLine("Ready: {0: HH:mm:ss}", DateTime.Now);
    37 
    38             Thread.Sleep(1000 * 5);
    39             FileInfo fs = new FileInfo(e.FullPath);
    40 
    41             var moveToPath = @"\testServerShares" + fs.Name;
    42             fs.MoveTo(moveToPath);
    43 
    44             if (!File.Exists(moveToPath))
    45             {
    46                 Console.WriteLine("Move Faild: {0: HH:mm:ss}", DateTime.Now);
    47             }
    48             Console.WriteLine("Move Success: {0: HH:mm:ss}", DateTime.Now);
    49         }
    50 
    51         static bool IsFileReady(string filename)
    52         {
    53             FileInfo fi = new FileInfo(filename);
    54             FileStream fs = null;
    55             try
    56             {
    57                 fs = fi.Open(FileMode.Open, FileAccess.ReadWrite,FileShare.None);
    58                 return true;
    59             }
    60 
    61             catch (IOException)
    62             {
    63                 return false;
    64             }
    65 
    66             finally
    67             {
    68                 if (fs != null)
    69                     fs.Close();
    70             }
    71         }
    72     }
    73 }
    View Code

    文件生成测试程序:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.IO;
     4 using System.Linq;
     5 using System.Text;
     6 using System.Threading;
     7 using System.Threading.Tasks;
     8 
     9 namespace GenerateFileTest
    10 {
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             FileStream fs = new FileStream("C:\FileSystemWatcher\Test.txt", FileMode.Create);
    16             StreamWriter sw = new StreamWriter(fs);
    17 
    18             var currDateTime = DateTime.Now;
    19             var maxDateTime = currDateTime.AddSeconds(10);
    20 
    21             Console.WriteLine("Log begin: {0}", DateTime.Now.ToString("HH:mm:ss"));
    22             while (currDateTime < maxDateTime)
    23             {
    24                 sw.WriteLine(DateTime.Now.ToString());
    25                 currDateTime = DateTime.Now;
    26             }
    27 
    28             //清空缓冲区
    29             sw.Flush();
    30             //关闭流
    31             sw.Close();
    32             fs.Close();
    33 
    34             Console.WriteLine("Log end: {0}", DateTime.Now.ToString("HH:mm:ss"));
    35             Console.ReadLine();
    36         }
    37     }
    38 }
    View Code

    运行结果:

     

  • 相关阅读:
    前端总结数据结构与算法基础
    Linux 常用命令
    mariadb下载二进制包源码包地址(使用清华)
    centos7添加永久静态路由
    登录普通用户会报错-bash: ulimit: open files: cannot modify limit: Operation not permitted
    编写二进制安装mariadb10.2的ansible-playbook剧本
    su
    URL后面加不加“/”有区别吗?
    RocketMQ在面试中那些常见问题及答案+汇总
    通过实现网站访问计数器带你理解 轻量级锁CAS原理,还学不会算我输!!!
  • 原文地址:https://www.cnblogs.com/elliot-lei/p/6594341.html
Copyright © 2011-2022 走看看