我想知道何时在特定目录上创建新文件,而不是不时扫描目录。

我知道有一种方法可以让操作系统告诉我的程序创建了一个新文件。它是如何工作的?

如上所述,这与...有相似之处 如何通知文件/目录在C / C ++中的变化,理想情况下使用POSIX

有帮助吗?

解决方案

取决于哪个操作系统。

在Windows上,基本API将是目录更改通知的。

由于您在标签中提到了Linux,因此这将是 inotify API

要添加到OS X答案,从10.5开始,您需要 FSEvents API

其他提示

在Linux下,请查看 Inotify

如何成为通知C / C ++中的文件/目录更改,理想情况下使用POSIX

或者在stackoverflow中搜索inotify,你会得到很多想法

FAM 为所有UNIX提供了一致的文件监视界面。在Linux上,后端守护程序可能会被 Gamin 取代,但程序已关联和FAM一起工作就好了。 (在幕后,FAM可能正在使用轮询,而Gamin可能正在使用inotify或dnotify或kqueue,但您不必担心实现。)

OS X.5有 FSEvents ,这是非常不同的,它监视整个系统而不是指定的文件和目录,但也满足您的需求。

在Windows上,请参阅查找(首页|下一页|关闭)ChangeNotification或ReadDirectoryChanges

FileSystemWatcher就是答案 - 它以递归方式工作。

有一个例子这里(搜索FileSystemWatcher)

使用Mac OS X,此功能是Spotlight API的一部分。

在Windows上使用.Net(不确定Linux / mono),您可以使用FileSsytemWatcher监视新文件并在创建事件时引发事件。

来自MSDN:

  

使用FileSystemWatcher进行监听   指定目录中的更改。您   可以监视文件和文件的变化   指定的子目录   目录。您可以创建一个组件   在本地计算机上观看文件,   网络驱动器或远程计算机。

MSDN Page

Windows API提供了监视文件系统的工具 - 这里有一个示例 http://msdn.microsoft.com/en-us/library/aa365261%28VS.85%29.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top