Вы можете использовать наблюдателя файловой системы, чтобы проверить, когда файл был изменен. Оно становится «измененным» только после того, как программа закрыла файл ранее. Я знаю, что вы просили 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