Vorrei leggere un file dopo che mi è stato notificato che è stata scritta una certa quantità di dati tramite un altro thread.
Il mio tentativo iniziale era di creare un soggetto reattivo nella mia classe Writer che chiama OnNext dopo la scrittura sul BinaryWriter con cui è composto. Questo BinaryWriter utilizza un FileStream.
Questo non sembra funzionare però. Presumo che non sia garantito che la Scrittura sia stata svuotata.
Preferisco non chiamare manualmente flush. Esiste un modo per farlo?Come posso generare le notifiche che i dati scritti tramite FileStream si trovano sul disco?
risposta
A un livello più ampio, stai chiedendo informazioni sulle comunicazioni tra i thread. Ci sono un paio di modi per gestirlo a seconda delle tue preferenze e dell'ambiente.
Se non lo si è già, controllare la filettatura POSIX here e here. Presta attenzione alle sezioni che trattano variabili condizionali o semafori.
Il framework .NET ha una libreria System Threading che vale anche la pena guardare oltre. In particolare, ha sia un semaforo che una classe di monitor. L'una o l'altra potrebbe essere la soluzione che ti serve in questo caso.
Infine, considerare l'interfaccia InotifyPropertyChanged e/o gli eventi. In questo contesto, è un percorso alternativo per segnalare il progresso del lettore.
In generale, si consiglia di fare in modo che il thread del writer lanci una notifica di modifica evento o generare un semaforo dopo aver scritto X byte. Da lì, il lettore catturerà l'evento o guarderà il semaforo e agirà di conseguenza.
Ho il sospetto che la classe di monitoraggio non sarà così utile per voi poiché il blocco probabilmente impedirà l'accesso simultaneo al file.
- 1. Modifica dati scritti su disco dal filesystem Ext4
- 2. Come si conservano i dati su disco da .NET?
- 3. Come posso bloccare un file durante la scrittura tramite FileStream?
- 4. come sono memorizzati i dati mysql sul disco?
- 5. Dove si trovano le classi di associazione dei dati generate?
- 6. Come vengono scritti i dati su HDFS?
- 7. Script per salvare i dati varbinary sul disco
- 8. I log della console Java non vengono scritti sul disco con un'applet
- 9. Ricerca di idee sulla memorizzazione dei dati sul disco locale
- 10. Come condividere i dati tra i processi python senza scrivere sul disco
- 11. Perché Spark shuffle memorizza i dati intermedi sul disco?
- 12. Come ignorare i file che si trovano nel repository?
- 13. Limitazione FILESTREAM SQL Server
- 14. Come posso archiviare un oggetto sul mio disco rigido?
- 15. Come si salvano i file sul disco rigido in un thread separato?
- 16. Come posso generare file zip senza salvare sul disco con Java?
- 17. Come posso generare file PEM per le notifiche push in iphone?
- 18. Come posso contare le celle che si trovano tra due numeri in Excel?
- 19. Come posso sostituire le notifiche di MPMoviePlayer?
- 20. : come cancellare le notifiche?
- 21. Proiezione prospettica: come posso proiettare i punti che si trovano dietro la 'fotocamera'?
- 22. Miglior strategia di salvataggio dei dati principali (quando salvare i dati sul disco)
- 23. Dove si trova Xcode sul disco rigido?
- 24. Dove si trovano i database integrati di H2 Memorizzare i dati?
- 25. R: rimuovere le righe da un frame di dati che si trovano in un altro
- 26. Come posso sbloccare un blocco FileStream?
- 27. Come posso ottenere l'elenco degli elementi DOM che si trovano in una determinata posizione nella pagina
- 28. PolymerJS: come generare i dati del modello?
- 29. Come si trovano rapidamente le implementazioni del metodo di un'interfaccia?
- 30. Dati principali - Guarda le modifiche e registra le notifiche locali
Congratulazioni per aver fatto la domanda numero 5.000.000! – dasblinkenlight
Guida [File System Watcher] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)? – Elias
Non c'è nessun premio per chi pone la domanda numerata 5.000.000 o successiva 6.000.000 o ...? Penso che valga la pena di ricevere 100 punti di reputazione. –