gpt4 book ai didi

c# - 如何在不影响 "last write time"的情况下更改文件

转载 作者:太空狗 更新时间:2023-10-30 00:53:32 24 4
gpt4 key购买 nike

我想写一些东西到文件里,比如

using( var fs = File.OpenWrite( file ) )
{
fs.Write( bytes, 0, bytes.Length );
}

但是,这会改变 "last write time" .我可以稍后使用

重置它
File.SetLastWriteTime( file, <old last write time> );

但与此同时,FileSystemWatcher已经触发。

现在我的问题是:是否可以在不改变“上次写入时间”的情况下写入文件?

最佳答案

您可以通过在 Kernel32.dll 中使用 P/Invoke 调用来实现它。

This Powershell script来自 MS TechNet 的实现了它,并明确声明 FileSystemWatcher 的事件不会被触发。

我已简要查看了该脚本,代码非常简单,可以轻松复制到您的 C# 项目中。

声明:

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetFileTime(IntPtr hFile, ref long lpCreationTime, ref long lpLastAccessTime, ref long lpLastWriteTime);

脚本在写入前使用SetFileTime 锁定文件时间。

private const int64 fileTimeUnchanged = 0xFFFFFFFF;

此常量作为对 lpCreationTime、lpLastAccessTime 和 lpLastWriteTime 方法的引用传递:

// assuming fileStreamHandle is an IntPtr with the handle of the opened filestream
SetFileTime(fileStreamHandle, ref fileTimeUnchanged, ref fileTimeUnchanged, ref fileTimeUnchanged);
// Write to the file and close the stream

关于c# - 如何在不影响 "last write time"的情况下更改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903972/

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