Ich möchte eine Datei lesen, nachdem ich benachrichtigt wurde, dass eine bestimmte Menge von Daten über einen anderen Thread dorthin geschrieben wurde.
Mein ursprünglicher Versuch war, ein reaktives Thema in meiner Writer-Klasse zu erstellen, die OnNext nach dem Write zu dem BinaryWriter aufruft, mit dem es zusammengesetzt wird. Dieser BinaryWriter verwendet einen FileStream.
Das scheint jedoch nicht zu funktionieren. Ich gehe davon aus, dass ich nicht garantieren kann, dass der Write gelöscht wurde.
Ich würde lieber nicht flush manuell aufrufen. Gibt es einen bestehenden Weg dies zu tun?Wie kann ich Benachrichtigungen generieren, dass Daten, die über einen FileStream geschrieben werden, auf dem Datenträger sind?
Antwort
Auf einer breiteren Ebene, fragen Sie über die Kommunikation zwischen Threads. Je nach Vorlieben und Umgebung gibt es mehrere Möglichkeiten, dies zu handhaben.
Wenn Sie noch nicht haben, schauen Sie über POSIX Threading here und here. Beachten Sie die Abschnitte über bedingte Variablen oder Semaphoren.
Das .NET Framework hat eine System Threading Bibliothek, die auch einen Blick wert ist. Insbesondere hat es sowohl eine Semaphor- als auch eine Monitor-Klasse. Der eine oder andere kann die Lösung sein, die Sie in diesem Fall benötigen.
Schließlich betrachten Sie die InotifyPropertyChanged Schnittstelle und/oder Ereignisse. In diesem Kontext ist es eine alternative Route, um dem Leser Fortschritte zu signalisieren.
Im Allgemeinen würde ich empfehlen, dass Ihr Writer-Thread eine Benachrichtigung über geänderte Ereignisse auslöst oder nach dem Schreiben von X-Bytes einen Semaphor auslöst. Von dort wird der Leser entweder das Ereignis abfangen oder nach dem Semaphor Ausschau halten und entsprechend handeln.
Ich vermute, die Monitor-Klasse wird nicht so nützlich für Sie sein, da das Sperren wahrscheinlich den gleichzeitigen Zugriff auf die Datei verhindern wird.
- 1. Wie kann ich die Sicherungsdatei auf dem Datenträger testen?
- 2. Wie kann ich einen Dateityp aus einem Blob/Filestream identifizieren?
- 3. Sind Standardstreams-Dateien auf einem Datenträger gespeichert?
- 4. Wie kann ich garantieren, dass Dateien, die über QNetworkAccessManager heruntergeladen werden, nicht beschädigt sind?
- 5. Wie kann ich Matlab mitteilen, dass einige der Daten, die importiert werden, in Hex angegeben sind?
- 6. Wie speichere ich JSON-Daten auf einem Datenträger?
- 7. Wie kann ich Excel-Tabellen auf dem Server generieren?
- 8. Wie kann ich eine Datei während des Schreibens über einen FileStream sperren?
- 9. ClickOnce-Upgrades, die frühere Versionen auf dem Datenträger belassen
- 10. Wo befinden sich die Docker-Images, die auf dem lokalen Datenträger gespeichert sind
- 11. Wie kann ich überprüfen, ob eine TAR-Datei mit dem Tarfile-Modul geschrieben werden kann?
- 12. Stream kann nicht geschlossen werden, bis alle Bytes geschrieben sind
- 13. Wie finde ich Dateien, die gerade in Linux geschrieben sind?
- 14. Verhindern, dass Nicht-ASCII-Zeichenfolgen in die Spalte geschrieben werden
- 15. Wie kann ich Daten, die in eine Textdatei geschrieben werden, in mongo db speichern?
- 16. XML UTF-8 Daten werden anders geschrieben
- 17. Bonjour/NSNetService Daten, die in NSOutputStream geschrieben werden, gelangen nie auf die andere Seite (includesPeerToPeer = true)
- 18. Sind benutzerdefinierte Push-Benachrichtigungen auf iOS möglich
- 19. Wie werden Ausnahmen, die auf dem Stack zugewiesen sind, über ihren Gültigkeitsbereich hinaus erfasst?
- 20. Cassandra-Snapshots auf einen anderen Datenträger/Server/Datencenter verschieben
- 21. Wie verhindere ich, dass Benutzer Daten über ein Formular fälschen?
- 22. Wie kann ich mit C++ Daten über einen Websocket senden?
- 23. Wie kann ich Daten zwischen zwei Geräten austauschen, die über Bluetooth in Android Studio gekoppelt sind?
- 24. Wie kann ich verhindern, dass Bilder zwischengespeichert werden? -ODER- Wie kann ich überprüfen, ob eine Datei auf dem Server existiert?
- 25. Wie kann die Menge der Daten begrenzt werden, die vom Kunden über Websocket gesendet werden?
- 26. Wie kann ich NERDTree auf dem gleichen Laufwerk öffnen, dass die Datei, die ich bearbeite?
- 27. Wie profile ich einen iOS-Anwendungsstart von Push-Benachrichtigungen?
- 28. Wie profile ich einen iOS-Anwendungsstart von Push-Benachrichtigungen?
- 29. Wo sind CAD-Apps geschrieben und wie sind sie organisiert?
- 30. „Backspace“ über letzte Zeichen geschrieben
Herzlichen Glückwunsch zum Stellen der Frage Nummer 5.000.000! – dasblinkenlight
Hilft [File System Watcher] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)? – Elias
Gibt es keinen Preis dafür, wer die Frage mit 5.000.000 oder 6.000.000 oder ... stellt? Ich denke, er/sie sollte es wert sein, 100 Punkte Ansehen zu erhalten. –