Hallo,
ich habe hier ein komisches Phänomen/Problem.
Folgendes soll passieren
Ich schreibe eine Datei. Diese Datei liegt auf unbestimmte Zeit (1-6 Sekunden) an ihren Platz und wird dann extern gelöscht (das muss auch so passieren). Dann schreibe ich eine neue Datei. Das passiert solange bis eine Liste abgearbeitet ist.
Um das umzusetzen, muss ich also prüfen, dass die Datei definitiv verschwunden ist bevor die nächste drankommt. Nun könnte ich experimentell die maximale Löschzeit ermitteln und immer diese Zeit warten. Das maximiert aber leider die Gesamtabarbeitungszeit der Liste, da dann immer diese Zeit gewartet wird, obwohl auch kürzere Zeitfenster zwischendurch drin wären.
Das beste wäre wohl ein FileSystemWatcher. Aber da ich das Ding ja gern meide wie der Teufel das Weihwasser, hab ichs erstmal versucht mit alle 2 Sekunden nachgucken per
Das ganze läuft asynchron wegen ner ganz anderen Thematik.
Die Schleife in etwa:
Und irgendwie scheint das
Mit File.Copy() Exception klappt das besser
Eine Idee dazu? Der prüft den Pfad (
Ich werds aber nun doch mit dem FileSystemWatcher probieren, ich schätze der händelt das genau so wie es muss, wenn man denn erstmal die Unzuverlässigkeit bei dem Ding gepatcht hat.
Viele Grüße
ich habe hier ein komisches Phänomen/Problem.
Folgendes soll passieren
Ich schreibe eine Datei. Diese Datei liegt auf unbestimmte Zeit (1-6 Sekunden) an ihren Platz und wird dann extern gelöscht (das muss auch so passieren). Dann schreibe ich eine neue Datei. Das passiert solange bis eine Liste abgearbeitet ist.
Um das umzusetzen, muss ich also prüfen, dass die Datei definitiv verschwunden ist bevor die nächste drankommt. Nun könnte ich experimentell die maximale Löschzeit ermitteln und immer diese Zeit warten. Das maximiert aber leider die Gesamtabarbeitungszeit der Liste, da dann immer diese Zeit gewartet wird, obwohl auch kürzere Zeitfenster zwischendurch drin wären.
Das beste wäre wohl ein FileSystemWatcher. Aber da ich das Ding ja gern meide wie der Teufel das Weihwasser, hab ichs erstmal versucht mit alle 2 Sekunden nachgucken per
FileInfo.Refresh
und FileInfo.Exists
.Das ganze läuft asynchron wegen ner ganz anderen Thematik.
Die Schleife in etwa:
VB.NET-Quellcode
- Task.Run(Sub()
- For Each request In Requests
- SendTo(dest, request)
- Next
- End Sub)
- Private Sub SendTo(dest As FileInfo, req As Request)
- Dim tryCount = 0
- While tryCount < 3
- Task.Delay(2000).Wait()
- dest.Refresh
- If Not dest.Exists Then
- File.WriteAllText(dest.Fullname, req.ToString)
- Exit While
- End If
- tryCount += 1
- End While
- End Sub
Refresh
hier nicht richtig hinzuhauen. Der erkennt das nicht immer, dass die Datei weg ist wenn sie weg ist. Man merkt, dass der zu langsam ist. (Zu oft durchs While läuft)Mit File.Copy() Exception klappt das besser
VB.NET-Quellcode
- Task.Run(Sub()
- For Each request In Requests
- SendTo(dest, request)
- Next
- End Sub)
- Private Sub SendTo(dest As FileInfo, req As Request)
- File.WriteAllText(myPath, req.ToString)
- Dim tryCount = 0
- While tryCount < 3
- Task.Delay(2000).Wait()
- Try
- File.Copy(myPath, dest.FullName, False)
- Exit While
- Catch ex As IOException
- tryCount += 1
- End Try
- End While
- End Sub
dest
) über ein Netzwerk hinweg, vielleicht irgendeine Besonderheit dadran?Ich werds aber nun doch mit dem FileSystemWatcher probieren, ich schätze der händelt das genau so wie es muss, wenn man denn erstmal die Unzuverlässigkeit bei dem Ding gepatcht hat.
Viele Grüße
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()