【发布时间】:2010-07-17 21:18:40
【问题描述】:
我有一个文本文件,同一应用程序的多个实例使用该文本文件在它们之间同步和交换数据。简而言之,它是一个包含数据文件列表的纯文本文件。这些数据文件定期来来去去。
是否有可靠的方法可以知道某些应用程序在上次读取文件后写入了该文件?通常你会使用修改日期。然而,该文件被如此频繁地访问,以至于它可能会一直存在于内存缓存中。因此,写入文件可能不会改变修改日期。
有没有其他方法可以知道文件已更改。
我知道文件系统通知,但不想在这里使用它们。
该软件是用 C# 编写的,但显然我也可以通过 InteropServices 使用任何 WinAPI 函数。软件在 Windows Server 2008 R2 上运行。文件系统为 NTFS。理想情况下,该方法也应该适用于网络共享。
【问题讨论】:
-
我们是否应该假设您也不想使用 FileSystemWatcher 类?
-
@tvanfosson “我知道文件系统通知,但不想在这里使用它们。”,还是 FileSystemWatcher 不使用这些?
-
@Jouke - 我不确定他是反对使用 FileSysteWatcher 类还是只使用 WinAPI:msdn.microsoft.com/en-us/library/aa364417(VS.85).aspx 所以我问了。我可以很容易地想象不想使用 pinvoke 来获取 WinAPI 函数,但没有意识到有一个类封装了该功能并使其更易于使用。如果他说 FileSystemWatcher,我就不会问了。
-
我会像其他人提到的那样使用 FileSystemWatcher。
-
我不明白为什么操作系统缓存会掩盖修改日期 - 如果应用程序写入文件并再次关闭它,修改日期将被设置,无论是否有任何内容实际上是否已刷新到物理磁盘。
标签: c# winapi filesystems