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"可以改成*.* --------------------编程问答--------------------
学习~~ --------------------编程问答-------------------- 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);
} --------------------编程问答--------------------
楼主要的是先监听到文件被修改了,然后再获取,监听是关键。 --------------------编程问答-------------------- FileSystemWatcher可以监视文件创建,修改,删除,重名名,修改属性等,不知道能不能满足你的需求。 --------------------编程问答-------------------- 需要这么实时?不需要这么实时,建议不要用钩子,有安全问题,容易被杀毒软件K掉
我们一般监控文件的最后修改时间,并且维护一个文件的list
以确定新增和删除操作 --------------------编程问答--------------------
没有说明如何返回我新增的那个文件名称,我能做到监听文件夹下的任何动作,但是不能得到获取的文件名 --------------------编程问答--------------------
是不是事件触发时FileSystemEventArgs e就是当前修改的文件名称?我试试 --------------------编程问答-------------------- 是的!
FileSystemEventArgs.Name 就是新文件名。 --------------------编程问答-------------------- 你可以看看MSDN中这几个事件:
RenamedEventArgs:
FullPath属性
OldFullPath属性
FileSystemEventArgs:
ChangeType属性
Created 文件或文件夹的创建。
Deleted 文件或文件夹的删除。
Changed 文件或文件夹的更改。更改的类型包括大小、属性、安全设置、最近写入时间和最近访问时间方面的更改。
Renamed 文件或文件夹的重命名。
补充:.NET技术 , C#