• 【.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

    运行结果:

     

  • 相关阅读:
    amq笔记:记一个关于PooledConnectionFactory的问题
    ganglia笔记:rrd数据库
    ganglia笔记:rrds目录
    golang笔记:unsupported driver -> Scan pair: <nil> -> *string
    golang笔记:cookie
    golang笔记:net/smtp
    spring笔记
    Qt坑点汇总
    QT自定义控件系列(二) --- Loading加载动画控件
    Qt自定义控件系列(一) --- 圆形进度条
  • 原文地址:https://www.cnblogs.com/elliot-lei/p/6594341.html
Copyright © 2020-2023  润新知