在StreamWriter处于打开状态时,修改date不会更新

我有一个日志logging解决scheme,并写入到应用程序正在运行时打开的文本文件。 我使用StreamWriter来写入文件。 我的logging器代码很简单(打开stream和写):

public void Open(string filePath, bool append) { if (this.logWriter != null) throw new InvalidOperationException( "Logger is already open"); if (!Directory.Exists(Path.GetDirectoryName(filePath))) Directory.CreateDirectory(Path.GetDirectoryName(filePath)); this.logWriter = new StreamWriter(filePath, append); this.logWriter.AutoFlush = true; } public void CreateEntry(string entry) { if (this.logWriter == null) return; this.logWriter.WriteLine(entry); } 

问题在于写入文件时,条目被写入,文件大小正在改变,但“修改date”属性不会改变。 有什么想法吗? 我如何手动更新修改date?

PS:我在Windows 7上

FindNextFile返回的修改日期是存储在目录条目中的缓存值,而不是存储在MFT记录中的始终更新的值(等同于inode)。 这是出于性能方面的原因,所以整个目录的信息可以通过一次读取来获得,而不是每个文件的读取。

每当关闭文件的句柄时,它就会被更新。*

您可以随时使用GetFileInformationByHandleGetFileInformationByHandleEx获取最新信息。 要使用此功能,您应该使用CreateFile打开文件,同时请求读取或写入访问权限并允许共享。

 HANDLE hFile = CreateFile(_T("Path/To/File"), 0, // No read or write access needed FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, // Don't create 0, NULL); 

这个句柄可以和GetFileInformationByHandleEx一起使用。

或者,简单地关闭这个句柄将更新目录条目以反映当前值。

*(准确地说,每当通过该名称打开的句柄关闭时,由于文件可以有多个硬链接)。