Vous pouvez utiliser un veilleur de système de fichiers pour vérifier si le fichier a été changé!. Il ne devient "changé" après que le programme a eu le fichier ferme le fi le. Je sais que vous avez demandé C#, mais mon VB.Net est beaucoup mieux. J'espère que vous ou quelqu'un d'autre peut traduire.
Il essaie d'ouvrir le fichier, s'il n'est pas disponible, il ajoute un observateur et attend que le fichier soit modifié. Une fois le fichier modifié, il essaie d'ouvrir à nouveau. Il déclenche une exception s'il attend plus de 120 secondes, car vous risquez de vous retrouver dans une situation où le fichier n'est jamais publié. En outre, j'ai décidé d'ajouter un délai d'attente pour le changement de fichier de 5 secondes, dans le cas de la petite possibilité que le fichier a été fermé avant la création du fichier observateur réel.
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
Veuillez signaler ce problème à Microsoft à l'adresse http://connect.microsoft.com/visualstudio. –
[John Aldrige] (http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic56372.aspx) l'a déjà fait [it] (https://connect.microsoft.com/VisualStudio/feedback/ ViewFeedback.aspx? FeedbackID = 240502) –
Le lien @JaderDias Connect est rompu –