.Net 监控文件夹是否有新文件生成,并确认文件没有被其他程序占用

监控文件夹测试程序:

 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 = @"\\testServer\Shares\" + 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 }

文件生成测试程序:

 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 }

运行结果:

 

时间: 2024-10-07 01:35:39

.Net 监控文件夹是否有新文件生成,并确认文件没有被其他程序占用的相关文章

IOS在Document目录下创建文件夹、保存、读取、以及删除文件

1 // 在Documents目录下创建一个名为LaunchImage的文件夹 2 NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"LaunchImage"]; 3 NSLog(@"%@",path); 4 5 NSFileManager *fileManager =

webform工程中aspx页面为何不能调用appcode文件夹下的类(ASP.NET特殊文件夹的用法)

App_code 只有website类型的工程才有效. App_Code 下创建的.cs文件仅仅是“内容”不是代码.你设置那个文件为“编译”就行了. 其他特殊文件夹 1. Bin文件夹 Bin文件夹包含应用程序所需的,用于控件.组件或者需要引用的任何其他代码的可部署程 序集.该目录中存在的任何.dll文 件将自动地链接到应用程序. 2. App_Browser文件夹 该可选的文件夹包含.browser文件..browser文件描述浏览器(不管是移动设备浏览器,还 是台式机浏览器)的特 征和功能.

复制文件夹及其包含的子文件或子文件夹

1 package com.hxl; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 10 /** 11 * 12 * @author Sch

server 2008 文件夹共享用户名密码,及用户对应文件夹权限划分

最近遇到的一个奇葩的问题服务器文件夹共享,虽然之前已经设置好,有先例,但是这里还是要提一下,一来巩固自己对这块的认知,二来,为以后查找方便:服务器server 2008 设置用户登陆共享文件夹:新建立文件demo,作为共享的母文件夹:(未遇到问题"坑"可不看)建立共享步骤:第一步:右键文件夹(demo属性)-->共享--↓共享:这里可以直接设置添加指定的账户账户访问此文件夹账户问题:添加账户: 首先打开[运行]程序: 运行中输入'CMD': 然后在上面输入'compmgmt.ms

Linux自动挂载镜像、远程桌面、共享win7文件夹、创建raid5卷、创建HTML文件及静态路由

Linux自动挂载镜像.远程桌面.共享win文件夹.创建raid5卷.创建HTML文件及网络静态路由综合小实验 环境描述: Linux01和win7分别是公司内网中的两台PC机,Linux02是公网上的一台web服务器根据以下需求完成实验. 1:Linux01实现镜像文件自动挂载,搭建yum仓库,配置远程桌面功能,可以远程桌面win7系统 2:win7提供共享文件夹,方便Linux01进行挂载,且win7可以使用xshell远程使用zhangsan用户登录Linux01系统 3:Linux02准

C#压缩文件夹至zip,不包含所选文件夹【转+修改】

转自园友:jimcsharp的博文C#实现Zip压缩解压实例[转] 在此基础上,对其中的压缩文件夹方法略作修正,并增加是否对父文件夹进行压缩的方法.(因为笔者有只压缩文件夹下的所有文件,却不想将选中的文件夹打入压缩文件的需求),话不多说,上代码:其中需要依赖ICSharpCode.SharpZipLib.dll: 之后,新建一个类,代码如下: using System; using System.Collections.Generic; using System.Linq; using Syst

获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中)

import java.io.File; import java.io.FileFilter; import java.io.ObjectInputStream.GetField; import java.util.ArrayList; import java.util.List; public class huoquwenjian { /*获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中) * 思路: * 1,既然包含子目录,就需要递归. * 2

C#遍历文件夹(包括子目录)下的所有文件

前提现在一个分区下建立bb.txt文件. 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.IO; 10 11 name

Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Simple

文件管理(页面上显示文件和文件夹,文件夹可以打开也可以返回上一层文件夹)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-