2011-08-16 9 views
8

Creé un disco virtual en C# usando la biblioteca Dokan (.NET), y está funcionando bastante bien.¿Admite Dokan/Dokan.NET (no) la E/S síncrona?

Sin embargo, cuando trato de leer un archivo de la unidad en otra aplicación obtengo una excepción siempre que uso operaciones que se leen de forma síncrona, como System.IO.File.ReadAllText(...).

El texto de la excepción es: "Handle no admite operaciones sincrónicas. Los parámetros para el constructor FileStream pueden necesitar ser cambiados para indicar que el identificador se abrió de forma asíncrona".

Así que si estoy interpretando esto correctamente, .NET aparentemente intenta leer todo el contenido del archivo en una sola operación síncrona, pero Dokan no parece permitir eso.

Pero cuando se utiliza un método como ReadAllText Realmente no tengo ningún control sobre la forma en que se construye la FileStream (no es que el punto central de ese método, después de todo, sólo tiene que obtener el contenido del archivo sin tener que preocuparse con Streams y Readers and Buffers y todo eso?).

¿Puedo obtener Dokan para admitir el acceso síncrono de E/S en su archivo maneja de alguna manera? ¿O tengo que vivir de alguna manera con el hecho de que las operaciones sincrónicas simplemente no son posibles en los archivos alojados en Dokan (y espero que ninguna aplicación que alguna vez tenga que funcionar en mi disco virtual dependa de ellos)?

+0

¿Te logrado resolver esto. Soy nuevo en Dokan. Lo más nuevo es actualmente 0.6 – Bamboo

Respuesta

0

¿Por qué necesita sincronicidad en la lectura del archivo? Podrías hacer una lectura asíncrona en una transmisión y manejarla cuando termine a través de una devolución de llamada.

Esto tiene una buena presentación/tutorial sobre diferentes maneras para archivo asíncrono de E/S:

msdn async file io

+1

El tipo de acceso no depende de mí. Solo quería proporcionar un sistema de archivos virtual al que cualquiera pudiera acceder. Si ese acceso ocurre, por ejemplo, una aplicación .NET escrita por otra persona, que usa el método 'ReadAllText' para leer un archivo de la unidad virtual, no hay mucho que pueda hacer. El sistema de archivos debería ser capaz de soportar cualquier tipo de acceso que las aplicaciones arbitrarias puedan estar usando. –

Cuestiones relacionadas