これは、Kernel32.dll で P/Invoke 呼び出しを使用して実現できます。
MS TechNet のこの Powershell スクリプト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