2011-08-16 8 views
8

Stworzyłem wirtualny dysk w C# przy użyciu biblioteki Dokan (.NET) i działa całkiem dobrze.Czy firma Dokan/Dokan.NET (nie) obsługuje synchroniczne operacje we/wy?

Jednak, gdy próbuję odczytać plik z napędu w innej aplikacji, otrzymuję wyjątek za każdym razem, gdy używam operacji synchronicznie odczytujących, takich jak System.IO.File.ReadAllText(...).

Tekst wyjątku: "Uchwyt nie obsługuje operacji synchronicznych. Parametry konstruktora FileStream mogą wymagać zmiany, aby wskazać, że uchwyt został otwarty asynchronicznie".

Więc jeśli interpretuję to poprawnie, NET najwyraźniej próbuje odczytać całą zawartość pliku w jednej operacji synchronicznej, ale Dokan nie pozwala na to.

Ale kiedy używam metody takiej jak ReadAllText, nie mam żadnej kontroli nad sposobem konstruowania FileStream (czy nie jest to, że cały punkt tej metody, po wszystkim, po prostu pobiera zawartość pliku bez konieczności przeszkadzania ze strumieniami i czytnikami oraz buforami i czym?).

Czy mogę uzyskać, aby Dokan w jakiś sposób obsługiwał synchroniczny dostęp I/O do swoich plików? Czy muszę w jakiś sposób żyć z tym, że synchroniczne operacje nie są możliwe na plikach hostowanych przez Dokan (i mam nadzieję, że od nich nie zależy żadna aplikacja, która mogłaby kiedykolwiek pracować na moim wirtualnym dysku)?

+0

Czy udało Ci się rozwiązać ten problem. Jestem nowy w Dokan. Najnowszy to obecnie 0.6 – Bamboo

Odpowiedz

0

Czy jest jakiś powód, dla którego wymagana jest synchronizacja w pliku? Możesz wykonać odczyt asynchroniczny do strumienia i obsłużyć, gdy zakończy się on przez wywołanie zwrotne.

To ma dobrą prezentacji/tutorial na różne sposoby, aby zrobić plik asynchronicznego I/O:

msdn async file io

+1

Rodzaj dostępu nie zależy ode mnie. Chciałem tylko zapewnić wirtualny system plików, do którego dostęp miałby każdy. Jeśli taki dostęp ma miejsce, na przykład, aplikacja .NET napisana przez kogoś innego, która używa metody "ReadAllText" do odczytu pliku z wirtualnego dysku, niewiele mogę zrobić. System plików powinien być w stanie obsługiwać każdy rodzaj dostępu, którego mogą używać dowolne aplikacje. –