微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux世界中是否有与.Net FileSystemWatcher相当的function?

我发现.Net FileSystemWatcher类非常方便编写实用程序,当文件显示在他们的监视文件夹中时它们会自动生效。 在* nix世界中是否有与此function相同的function,可以让我观看文件夹(可能还有其所有子目录)?

编辑:最好这将是不需要内核补丁的东西。

使用适用于Windows XP / 7的Metro UI开发应用程序

在Universal Apps中截取当前网站的屏幕截图

在.NET中占用固定的地址

如何测量C#中的系统空闲时间,不包括看电影等?

分布式locking机制.NET

这将是Gamin文件更改监视器或Inotify 。

编辑:单声道有Gamin绑定 – 实际上,它的FileSystemWatcher的实现使用Gamin。 请参阅http://www.mono-project.com/FAQ:_Technical (搜索FileSystemWatcher的页面,常见问题解答中不包含锚点)。

问候,我想在Ubuntu 10.10的Mono中使用FileSystemWatcher分享我的观察。 这里是一个非常简单的实现FileSystemWatcher在C#

using System; using System.Collections.Generic; using System.Collections; using System.Text; using System.IO; using System.Reflection; namespace FileSystemWatcherSandBox { public class Program { static void Main(string[] args) { foreach(DictionaryEntry de in Environment.GetEnvironmentvariables()) { Console.WriteLine("{0} = {1}",de.Key,de.Value); } string basePath = AppDomain.CurrentDomain.BaseDirectory; Console.WriteLine("watching: {0}",basePath); FileSystemWatcher fsw = new FileSystemWatcher(basePath); fsw.Changed += new FileSystemEventHandler(fsw_Changed); fsw.Created += new FileSystemEventHandler(fsw_Created); fsw.Deleted += new FileSystemEventHandler(fsw_Deleted); fsw.Error += new ErrorEventHandler(fsw_Error); fsw.Renamed += new RenamedEventHandler(fsw_Renamed); fsw.EnableRaisingEvents = true; fsw.IncludeSubdirectories = true; while (true) { WaitForChangedResult result = fsw.WaitForChanged(WatcherChangeTypes.All,10000); Console.WriteLine(result.TimedOut ? "Time out" : "hmmm"); } } static void fsw_Renamed(object sender,RenamedEventArgs e) { Console.WriteLine("({0}): {1} | {2}",MethodInfo.GetCurrentMethod().Name,e.ChangeType,e.FullPath); } static void fsw_Error(object sender,ErrorEventArgs e) { Console.WriteLine("({0}): {1}",e.GetException().Message); } static void fsw_Deleted(object sender,FileSystemEventArgs e) { Console.WriteLine("({0}): {1} | {2}",e.FullPath); } static void fsw_Created(object sender,e.FullPath); } static void fsw_Changed(object sender,e.FullPath); } } }

代码已经过测试,可以在Windows XP和Ubuntu 10.10上运行。 不过,我想指出的是,在Ubuntu 10.10(可能更早的版本)下,FileSystemWatcher的行为是唯一的。

如果正在监视的目录不包含子目录,则调用带有IncludeSubdirectories属性设置为true的FileSystemWatcher将导致FileSystemWatcher忽略事件。 但是,如果目标目录中有子目录,则IncludeSubdirectories设置为true将按预期工作。

如果IncludeSubdirectories设置为false,总是会工作的。 在这种情况下,FileSystemWatcher只会看目标目录。

我希望这对于希望跨不同操作系统使用Mono并调用FileSystemWatcher类型的程序员很有用。

chickenSandwich

正如已经说过的,Mono具有类“System.IO.FileSystemWatcher”,这是相关链接: http : //www.go-mono.com/docs/monodoc.ashx? link=T% 3aSystem.IO。 FileSystemWatcher的

Mono的FileSystemWatcher实现有多个后端,这是必要的,因为并不是Mono支持的所有操作系统都具有提供应用程序所需功能所需的所有功能

如果操作系统内核支持观看目录(在Linux上进行inotify,BSD或OSX上的KEvents),则使用该功能; 否则,它会回到使用Gamin或FAM库(这些库提供了一个API来监视目录),如果没有这些功能可用,Mono将每隔750毫秒轮询目录。

在执行应用程序之前,可以通过设置MONO_MANAGED_WATCHER环境变量来强制轮询行为(而不是使用内核支持)。 这对于不支持inotify的文件系统可能很有用,而且仍然需要轮询来检测更改。“

是的,通知通知

我不知道莫诺是否有这些包裹,但它是值得检查。

如果您使用的是精彩的QT库(www.qtsoftware.com),那么它就是qfilesystemwatcher

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐