ファイル システム ウォッチャーを使用して、ファイルがいつ変更されたかを確認できます。以前にファイルを閉じていたプログラムがファイルを閉じた後にのみ、「変更」されます。あなたが C# を要求したことは知っていますが、私の VB.Net ははるかに優れています。あなたまたは他の誰かが翻訳できることを願っています。
ファイルを開こうとし、利用できない場合はウォッチャーを追加し、ファイルが変更されるのを待ちます。ファイルが変更された後、再度開こうとします。ファイルが解放されない状況に陥る可能性があるため、120 秒以上待機すると例外がスローされます。また、実際のファイル ウォッチャーが作成される前にファイルが閉じられた可能性が小さい場合に備えて、5 秒のファイル変更を待機するタイムアウトを追加することにしました。
Public Sub WriteToFile(ByVal FilePath As String, ByVal FileName As String, ByVal Data() As Byte)
Dim FileOpen As Boolean
Dim File As System.IO.FileStream = Nothing
Dim StartTime As DateTime
Dim MaxWaitSeconds As Integer = 120
StartTime = DateTime.Now
FileOpen = False
Do
Try
File = New System.IO.FileStream(FilePath & FileName, IO.FileMode.Append)
FileOpen = True
Catch ex As Exception
If DateTime.Now.Subtract(StartTime).TotalSeconds > MaxWaitSeconds Then
Throw New Exception("Waited more than " & MaxWaitSeconds & " To Open File.")
Else
Dim FileWatch As System.IO.FileSystemWatcher
FileWatch = New System.IO.FileSystemWatcher(FilePath, FileName)
FileWatch.WaitForChanged(IO.WatcherChangeTypes.Changed,5000)
End If
FileOpen = False
End Try
Loop While Not FileOpen
If FileOpen Then
File.Write(Data, 0, Data.Length)
File.Close()
End If
End Sub