gpt4 book ai didi

c# - StreamWriter 打开时,修改日期不会更新

转载 作者:可可西里 更新时间:2023-11-01 10:04:38 24 4
gpt4 key购买 nike

我有一个日志记录解决方案并写入一个文本文件,该文件在应用程序运行时打开。我使用 StreamWriter 写入文件。我的记录器代码很简单(打开流并写入):

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);

}

问题是在写入文件时,条目被写入,文件大小发生变化,但“修改日期”属性没有改变。有什么想法吗?如何手动更新修改日期?

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 一起使用。

或者简单地关闭此句柄将更新目录条目以反射(reflect)当前值。

*(准确地说,只要关闭通过该名称打开的句柄,因为一个文件可以有多个硬链接(hard link)。)

关于c# - StreamWriter 打开时,修改日期不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36219705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com