2011-08-16 14 views
8

Ho creato un'unità virtuale in C# utilizzando la libreria Dokan (.NET) e funziona abbastanza bene.Dokan/Dokan.NET (not) supporta I/O sincrono?

Tuttavia, quando provo a leggere un file dall'unità in un'altra applicazione ottengo un'eccezione ogni volta che si utilizzano operazioni che leggono in modo sincrono, come System.IO.File.ReadAllText(...).

Il testo dell'eccezione è: "L'handle non supporta le operazioni sincrone. Potrebbe essere necessario modificare i parametri del costruttore FileStream per indicare che l'handle è stato aperto in modo asincrono".

Quindi, se sto interpretando correttamente, .NET sembra cercare di leggere l'intero contenuto del file in una singola operazione sincrona, ma Dokan non sembra consentirlo.

Ma quando si utilizza un metodo come ReadAllText in realtà non ho alcun controllo sul modo in cui è costruito il FileStream (non è che l'intero punto di quel metodo, dopo tutto, ottiene semplicemente il contenuto del file senza doversi preoccupare con stream e lettori e buffer e quant'altro?).

È possibile ottenere Dokan per supportare in qualche modo l'accesso I/O sincrono alle relative maniglie di file? O devo in qualche modo convivere con il fatto che le operazioni sincrone non sono possibili sui file ospitati da Dokan (e spero che nessuna applicazione che possa mai funzionare sul mio disco virtuale dipenda da loro)?

+0

Sei riuscito a risolvere questo problema. Sono nuovo di Dokan. Il più recente è attualmente 0.6 – Bamboo

risposta

0

Qualsiasi motivo per cui è necessario sincronicità nel file letto? È possibile eseguire una lettura asincrona su uno stream e gestirla al termine di una richiamata.

Questo ha una buona presentazione/tutorial su modi diversi di file asincrone di I/O:

msdn async file io

+1

Il tipo di accesso non dipende da me. Volevo solo fornire un file system virtuale a cui chiunque potesse accedere. Se quell'accesso avviene anche se, ad esempio, un'applicazione .NET scritta da qualcun altro, che capita di usare il metodo 'ReadAllText' per leggere un file dall'unità virtuale, non c'è molto che possa fare. Il file system dovrebbe essere in grado di supportare qualsiasi tipo di accesso che le applicazioni arbitrarie potrebbero utilizzare. –