Unterstützt Dokan / Dokan.NET (nicht) synchrone I / O?

8

Ich habe ein virtuelles Laufwerk in C # mit der Dokan (.NET) -Bibliothek erstellt, und es funktioniert ziemlich gut.

Wenn ich jedoch versuche, eine Datei vom Laufwerk in einer anderen Anwendung zu lesen, erhalte ich eine Ausnahme, wenn ich Operationen verwende, die synchron lesen, wie System.IO.File.ReadAllText(...) .

Der Text der Ausnahme lautet: "Handle unterstützt keine synchronen Operationen. Die Parameter für den FileStream-Konstruktor müssen möglicherweise geändert werden, um anzuzeigen, dass das Handle asynchron geöffnet wurde".

Wenn ich das richtig interpretiere, versucht .NET offensichtlich, den gesamten Inhalt der Datei in einem einzigen synchronen Vorgang zu lesen, aber Dokan scheint das nicht zuzulassen.

Aber wenn ich eine Methode wie ReadAllText verwende, habe ich keine Kontrolle über die Art und Weise, wie die FileStream konstruiert wird (ist das nicht der ganze Sinn dieser Methode, sondern einfach den Inhalt der Datei ohne sich mit Streams und Lesern und Puffern beschäftigen müssen und was nicht?).

Kann ich Dokan dazu bringen, den synchronen I / O-Zugriff auf die Dateigriffe irgendwie zu unterstützen? Oder muss ich irgendwie mit der Tatsache leben, dass synchrone Operationen bei Dokan-gehosteten Dateien einfach nicht möglich sind (und hoffen, dass keine Anwendung, die jemals auf meinem virtuellen Laufwerk funktionieren muss, davon abhängt)?

    
Andreas Baus 16.08.2011, 11:27
quelle

1 Antwort

0

Irgendwelche Gründe, warum Sie Synchronität in der Datei lesen müssen? Sie können ein asynchrones Lesen in einem Stream durchführen und nach Abschluss über einen Rückruf verarbeiten.

Dies hat eine gute Präsentation / Tutorial zu verschiedenen Möglichkeiten, async Datei-E / A zu tun:

msdn async file io

    
negEntropy 04.06.2012 15:45
quelle

Tags und Links