Chciałbym przeczytać plik po otrzymaniu powiadomienia, że pewna ilość danych została do niego zapisana przez inny wątek.
Moją pierwszą próbą było stworzenie Reaktywnego Przedmiotu w mojej klasie Writera, który wywołuje OnNext po zapisie do BinaryWriter, z którym się składa. Ten BinaryWriter używa FileStream.
To jednak nie działa. Zakładam, że nie mam gwarancji, że Zapis został spłukany.
Wolałbym nie ręcznie wywoływać flush. Czy istnieje sposób, aby to zrobić?Jak mogę wygenerować powiadomienia, że dane zapisane przez FileStream znajdują się na dysku?
Odpowiedz
Na szerszym poziomie pytasz o komunikację między wątkami. Jest kilka sposobów radzenia sobie z tym w zależności od twoich preferencji i środowiska.
Jeśli jeszcze tego nie zrobiłeś, spójrz na wątki POSIX here i here. Zwróć uwagę na sekcje omawiające zmienne warunkowe lub semafory.
Architektura .NET ma bibliotekę System Threading, którą warto również przejrzeć. W szczególności ma zarówno semafor, jak i klasę monitora. Jeden lub drugi może być rozwiązaniem, którego potrzebujesz w tym przypadku.
Wreszcie, należy rozważyć interfejs i/lub zdarzenia InotifyPropertyChanged. W tym kontekście jest to alternatywna droga do sygnalizowania postępu od czytnika.
Ogólnie rzecz biorąc, zaleciłbym, aby wątek Twojego pisarza wyświetlał powiadomienie o zmianie zdarzenia lub wznosił semafor po zapisaniu X bajtów. Stamtąd czytelnik albo złapie wydarzenie, albo obejrzy semafor i podejmie odpowiednie działania.
Podejrzewam, że klasa monitora nie będzie dla ciebie tak przydatna, ponieważ blokowanie prawdopodobnie uniemożliwi równoczesny dostęp do pliku.
- 1. Jak mogę zablokować plik podczas zapisu do niego przez FileStream?
- 2. Jak przechowywać dane JSON na dysku?
- 3. Jak wykreślić kontury na mapie za pomocą ggplot2, gdy dane znajdują się na nieregularnej siatce?
- 4. Jak wygenerować dane geoJson?
- 5. jak dołączyć zapisane dane do pliku?
- 6. Ograniczenie FILESTREAM serwera SQL
- 7. Sprawdź, jakie dane znajdują się w pliku danych SQL Server?
- 8. Trwałe dane na dysku za pomocą Hazelcast
- 9. Gdzie znajdują się logi?
- 10. Jak mogę sprawdzić dostępne miejsce na dysku?
- 11. Jak mogę wygenerować plik zip bez zapisywania go na dysku przy pomocy Javy?
- 12. Jak mogę zobaczyć, że ActiveRecord generuje dane SQL?
- 13. Gdzie znajdują się pliki opencv2?
- 14. Jak kontrolować, gdzie znajdują się pliki $ py.class?
- 15. Jak mogę wygenerować plik tsconfig.json?
- 16. Jak mogę uzyskać listę elementów DOM, które znajdują się na danej pozycji na stronie
- 17. Jak sprawdzić, czy wszystkie poniższe pozycje znajdują się na liście?
- 18. Jak mogę wygenerować ciąg HTML z grupy przez
- 19. Jak mogę utworzyć łącze do zdjęć, które nie znajdują się w folderze statycznym w kolbie
- 20. Otrzymuj dane z powiadomienia GCM
- 21. Gdzie znajdują się wygenerowane klasy powiązań danych?
- 22. FileStream nie wydaje się być włączony
- 23. Jak mogę się upewnić, że funkcja strtol() powiodła się?
- 24. Jak kodować zapisane komentarze?
- 25. Najlepsza strategia składowania danych podstawowych (kiedy zapisywać dane na dysku)
- 26. Jak mogę wygenerować serię powtarzających się liczb w PostgreSQL?
- 27. Gdzie Xcode znajduje się na dysku twardym?
- 28. Jak odczytać plik tekstowy do R, gdy dane nie znajdują się w tabeli
- 29. Gdzie znajdują się pliki danych elasticsearch na standardowej instalacji debian?
- 30. Jak mogę wygenerować plik .pfx?
Gratulujemy odpowiedzi na pytanie 5 000 000! – dasblinkenlight
Czy [File Watcher] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx) pomaga? – Elias
Czy nie ma nagrody dla tego, kto zadaje pytanie o numerze 5 000 000 lub następne 6 000 000 lub ...? Myślę, że on/ona powinien być wart 100 punktów reputacji. –