我想知道何时在特定目录上创建新文件,而不是不时扫描目录。
我知道有一种方法可以让操作系统告诉我的程序创建了一个新文件。它是如何工作的?
如上所述,这与...有相似之处 How to be notified of file/directory change in C/C++, ideally using POSIX
答案 0 :(得分:16)
取决于哪个操作系统。
在Windows上,基本API为Directory Change Notifications。
由于您在标记中提到了Linux,因此这将是inotify API。
要添加到OS X答案,从10.5开始,您需要FSEvents API。
答案 1 :(得分:7)
在Linux下,请查看Inotify。
答案 2 :(得分:4)
How to be notified of file/directory change in C/C++, ideally using POSIX
或者在stackoverflow中搜索inotify,你会得到很多想法
答案 3 :(得分:3)
FAM为所有UNIX提供了一致的文件监视界面。在Linux上,后端守护程序可以由Gamin替换,但与FAM链接的程序可以与Gamin一起使用。 (在幕后,FAM可能正在使用轮询,而Gamin可能正在使用inotify或dnotify或kqueue,但您不必担心实现。)
OS X.5有FSEvents,它的不同之处在于它监视整个系统而不是指定的文件和目录,但也可以满足您的需求。
在Windows上,请参阅Find(First|Next|Close)ChangeNotification or ReadDirectoryChanges。
答案 4 :(得分:2)
FileSystemWatcher就是答案 - 它以递归方式工作。
有一个例子here(搜索FileSystemWatcher)
答案 5 :(得分:1)
在Windows上使用.Net(不确定Linux / mono),您可以使用FileSsytemWatcher监视新文件并在创建事件时引发事件。
来自MSDN:
使用FileSystemWatcher进行监听 指定目录中的更改。您 可以监视文件和文件的变化 指定的子目录 目录。您可以创建一个组件 在本地计算机上观看文件, 网络驱动器或远程计算机。
答案 6 :(得分:1)
使用Mac OS X,此功能是Spotlight API的一部分。
答案 7 :(得分:1)
Windows API提供了监视文件系统的工具 - 这里有一个示例http://msdn.microsoft.com/en-us/library/aa365261%28VS.85%29.aspx