您可以通过在 Kernel32.dll 中使用 P/Invoke 调用来实现它。
这个来自 MS TechNet 的 Powershell 脚本实现了它,并明确声明 aFileSystemWatcher
的事件不会被触发。
我简要地查看了脚本,代码非常简单,可以轻松复制到您的 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