Frage

Ich versuche, eine Stream zu verwenden, um eine Datei zu lesen, aber es ist immer von einem anderen Prozess so bekomme ich diesen Fehler:

  

Der Prozess kann nicht auf die Datei zugreifen   ‚\ Arfjwknasgmed17 \ C $ \ FLAG   ZUSTAND \ CP-ARFJN-FLAG.XLS‘, weil   es wird von einem anderen Prozess verwendet wird.

Gibt es eine Möglichkeit ich das es ohne das Kopieren lesen kann? Oder ist das meine einzige Option?

War es hilfreich?

Lösung

Sie können die Datei nur lesen, wenn das Programm, das die Datei zuerst auf die Datei lesen Freigaberechte angegeben geöffnet.

Wenn die Datei in der Tat keine Lesefreigaberechte obwohl hat, würden Sie nicht in der Lage sein, es in erster Linie zu kopieren.

Sie können nicht in der Lage sein, auf eine Datei zuzugreifen, wenn Sie ein Freigabe-Recht angeben, die mit dem Austausch Recht eines Programms in Konflikt steht, die bereits die Datei geöffnet hat. Zum Beispiel können Sie keinen Schreibzugriff gewähren, wenn das Programm, das sie bereits geöffnet ist, keinen Schreibzugriff zu gewähren.

Wenn das Programm, das die Datei an erster Stelle geöffnet unterstützt Volume Shadow Copy (VSS), können Sie auch VSS verwenden können, Zugriff auf die Datei zu erhalten.

Es gibt kommerzielle Software-Treiber, die Sie solche Dateien zugreifen können, auch wenn sie in Gebrauch sind. Sie verwendet werden können Open File Manager von St-Bernards bekommen, und Sie können auch File Access Manager (FAM) verwenden von Visionworks Solutions Inc. Diese Treiber typischerweise OEM'ed Backup-Software-Unternehmen für die Aufnahme in ihre Produkte.

VSS arbeitet das Programm, dass die Datei geöffnet hat bereits, dass ein anderes Programm möchte aus der Datei lesen. VSS hat dann eine Kopie der Datei und können Sie aus dieser Kopie lesen. VSS nicht für Legacy-Anwendungen arbeiten.

FAM arbeitet transparent für Legacy-und Nicht-Legacy-Programme gleichermaßen durch eine ‚erlaubte Liste‘ Anwendungen angeben, die exklusiv geöffnet und gesperrten Dateien zugreifen kann. Nur Programme in dieser Liste Zugriff auf diese Dateien erlaubt. Wenn eine Datei geöffnet wird, geht es in den Cache-Modus, so dass Sie eine Kopie der Datei erhalten wird, wie es war, als die ‚Backup / open‘ der Datei gestartet. An diesem Punkt wird das Programm, das ursprünglich die Datei geöffnet sieht die Datei als es tatsächlich ist, und das zweite Programm in der erlaubten Liste, sieht die Datei wie es war, als der ‚offene / backup‘ der Datei passiert ist. Dies gewährleistet die Konsistenz der Datei.

Andere Tipps

versuchen, den Code unten.

FileStream fileStr = File.Open(<full file name>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
fileStream = new StreamReader(fileStr);

Ich habe es unter Windows XP versucht. Wenn die Datei im Schreibmodus durch einen anderen Prozess bereits geöffnet ist und es Freigaberechte nicht angegeben hat, werden Sie noch in der Lage sein, die Datei im Lesemodus zu öffnen.

Disclaimer: Es funktioniert, aber dann, ich bin nicht sicher, ob Sie es in Produktionscode verwenden sollten. Ich bin noch nicht die Lage, jede formale Dokumentation zu finden, der sagt, es sollte funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top