当前位置:编程学习 > C#/ASP.NET >>

Windows 服务问题

写了一个Windows服务监视某个文件夹,当在文件夹中做任何增、删、改、重命名的动作时自动触发事件

请问,如何在触发事件时获取当前修改的文件名称,如新增时获取新增的文件名称。 --------------------编程问答-------------------- 用钩子
用拷贝钩子实现对文件夹的监控 --------------------编程问答-------------------- Folder Listener: A Tool to Watch File System Activity in any Folder 

这个例子是你需要的,而且是c#版本的
http://www.codeproject.com/KB/files/FolderListener.aspx --------------------编程问答-------------------- 调用里面的FileSystemWatcher 类,就是这么简单:


FileSystemWatcher fsw = new FileSystemWatcher();
//指定监听哪个目录
fsw.Path = textBox1.Text;
//指定监听哪些属性的更改:
fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | 
                   NotifyFilters.DirectoryName | NotifyFilters.FileName;
//自定义处理事件:
fsw.Changed += new FileSystemEventHandler(OnChanged);
fsw.Created += new FileSystemEventHandler(OnCreated);
fsw.Deleted += new FileSystemEventHandler(OnChanged);
fsw.Renamed += new RenamedEventHandler(OnRenamed);
fsw.EnableRaisingEvents = true;
--------------------编程问答-------------------- 你这个问题似乎和服务没有什么关系,你要获取当前修改的文件名称。


取得目录(m_path)下所有文件的文件名
//返回的是m_path目录里每一个.txt文件的完整的路径
//其中m_path为目录的完整路径
string[] fileName = System.IO.Directory.GetFiles(m_path,"*.txt");
//取得第一个.txt文件的路径
m_allFilePath = fileName[0];
//如果目录下还有子目录就用下面这个
string[] fileNames = System.IO.Directory.GetFiles(m_path,"*",SearchOption.AllDirectories);

--------------------编程问答-------------------- 在服务触发时写上面的代码。

另外"*.txt"可以改成*.* --------------------编程问答--------------------
引用 2 楼 computerfox 的回复:
Folder Listener: A Tool to Watch File System Activity in any Folder 

这个例子是你需要的,而且是c#版本的
http://www.codeproject.com/KB/files/FolderListener.aspx


学习~~ --------------------编程问答-------------------- public void Initial() 
{
   System.IO.FileSystemWatcher fsw = new System.IO.FileSystemWatcher("D:\\folder");
  // Add event handlers.
   fsw.Created += new FileSystemEventHandler(fsw_Changed);
   fsw.Changed += new FileSystemEventHandler(fsw_Changed);
  // Begin watching.
   fsw.EnableRaisingEvents = true;
}  
void fsw_Changed(object sender, FileSystemEventArgs e) 
{  
  MessageBox.Show("Changed", e.Name); 
} --------------------编程问答--------------------
引用 4 楼 hejialin666 的回复:
你这个问题似乎和服务没有什么关系,你要获取当前修改的文件名称。

C# code

取得目录(m_path)下所有文件的文件名
//返回的是m_path目录里每一个.txt文件的完整的路径
//其中m_path为目录的完整路径
string[] fileName = System.IO.Directory.GetFiles(m_path,"*.txt");
//取得第一个.txt文件的路径……


楼主要的是先监听到文件被修改了,然后再获取,监听是关键。 --------------------编程问答-------------------- FileSystemWatcher可以监视文件创建,修改,删除,重名名,修改属性等,不知道能不能满足你的需求。 --------------------编程问答-------------------- 需要这么实时?不需要这么实时,建议不要用钩子,有安全问题,容易被杀毒软件K掉

我们一般监控文件的最后修改时间,并且维护一个文件的list

以确定新增和删除操作 --------------------编程问答--------------------
引用 3 楼 computerfox 的回复:
调用里面的FileSystemWatcher 类,就是这么简单:


C# code

FileSystemWatcher fsw = new FileSystemWatcher();
//指定监听哪个目录
fsw.Path = textBox1.Text;
//指定监听哪些属性的更改:
fsw.NotifyFilter = NotifyFilters.LastAccess | ……


没有说明如何返回我新增的那个文件名称,我能做到监听文件夹下的任何动作,但是不能得到获取的文件名 --------------------编程问答--------------------
引用 7 楼 mngzilin 的回复:
public void Initial() 
{
  System.IO.FileSystemWatcher fsw = new System.IO.FileSystemWatcher("D:\\folder");
  // Add event handlers.
  fsw.Created += new FileSystemEventHandler(fsw_Changed);
  fs……


是不是事件触发时FileSystemEventArgs e就是当前修改的文件名称?我试试 --------------------编程问答-------------------- 是的!
FileSystemEventArgs.Name 就是新文件名。 --------------------编程问答-------------------- 你可以看看MSDN中这几个事件:
RenamedEventArgs:
FullPath属性
OldFullPath属性

FileSystemEventArgs:
ChangeType属性
 Created 文件或文件夹的创建。 
 Deleted 文件或文件夹的删除。 
 Changed 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。 
 Renamed 文件或文件夹的重命名。 


补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,