c# – 如何在不影响“上次写入时间”的情况下更改文件
作者:互联网
我想写一些文件,比如
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调用来实现它.
MS TechNet的This Powershell script实现了它,并明确声明不触发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,timestamp,file-io,filesystemwatcher 来源: https://codeday.me/bug/20190529/1178795.html