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