Ausnahme in dem öffnen einer Datei, die bereits geöffnet
Baue ich eine Anwendung in C#, in denen ich eine CSV-Datei öffnen zum Lesen von Daten aus es. Ich bekomme eine exception wenn ich versuche, öffnen Sie die CSV-Datei aus C# wenn die Datei schon in Excel öffnen. Die Ausnahme besagt, dass der Prozess kann nicht auf die Datei zugreifen, da Sie bereits geöffnet ist. Wie kann ich dieses problem lösen und öffnen Sie die Datei, selbst wenn es geöffnet wird, in der anderen Anwendung?
Dank,
Rakesh.
- poste bitte etwas code, um uns zu zeigen, was Sie bisher getan haben
- Dies ist der code: using (FileStream fs = new FileStream(csvOpenFileDialog.FileName, FileMode.Open, FileAccess.Lesen))
- Ihnen fehlt ein argument. Lesen Sie meine Antwort.
- Überprüfen Sie die Antwort, die Hans bietet unten. FileShare.Lesen scheint nicht zu funktionieren, wenn die Datei bereits geöffnet ist. FileShare.ReadWrite funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.

Stand ich vor diesem problem einige Zeit zurück.
Fehlt der
FileShareparameter. Ohne die Angabe, dass, wenn Sie eine Datei öffnen, wird es gesperrt werden, die ausschließlich durch Ihre Anwendung. Aber da es bereits geöffnet Excel (oder jede andere app), erhalten Sie eine Ausnahme.Können Sie versuchen, mit diesem - ich glaube, dies wird Ihre beste Wette -
using (FileStream fs = File.Open(<file-path>, FileMode.Open, FileAccess.Read, FileShare.Read))Dieser code sagt: Hallo Excel! Wenn Sie es erlauben (Lesen, nicht throw exception), ich möchte die Datei Lesen, aber ich werde nicht versuchen, es zu besitzen, und ich weiß, dass Sie können ändern Sie es jederzeit.
Wenn diese Fehler, dann Excel hat, verweigert Sie auch die lese-Zugriff. Schade dann!
Alle die besten.
FileShare.ReadWriteBehoben, mein problem, nach einer Weile,nur um zu bemerken, dass ich hatte einen anderen block, wo ich die Methode aufgerufen hat, bekam ich die Ausnahme... so überprüfen Sie Ihren code, wenn Sie dieses Problem haben... so etwas ist definitiv mit der Datei...Es ist möglich, aber Sie müssen sorgfältig kontrollieren die Dateifreigabe, die Sie angeben. Die meisten .NET-Klassen standardmäßig FileShare.Lesen, verweigert einem anderen Prozess aus auf die Datei schreiben. Aber das kann nicht funktionieren, wenn die Datei geöffnet wird, die von Excel, die es bereits erlangt Schreibzugriff. Sie können nicht leugnen, ein Recht, das wurde bereits erworben.
Um das problem zu beheben, stellen Sie Ihren code in etwa so Aussehen:
Hinweis: die Nutzung von FileShare.ReadWrite. Ich habe überprüft dieser code funktioniert in Excel beim test hatte.csv geöffnet.
Hüten Sie sich vor den möglichen Schwierigkeiten werden Sie einladen, mit diesem, sonderbare Dinge passieren können, wenn Excel schreibt die Datei nur, wie Sie es Lesen. Sie werden wahrscheinlich Lesen Sie Müll, ein Teil der alten Daten, Teil des neuen, ohne ein guter Weg, um dies zu diagnostizieren.
Durch concurrency-Probleme können Sie nicht die Möglichkeit haben, zu schreiben, zu zwei Instanzen der gleichen Datei. Es sollte möglich sein zu öffnen, als gelesen-nur dies würde es ermöglichen, für die es keine Parallelität Problem, wie zu Lesen ist, garantiert werden, um thread-safe. Dieser Artikel sollte erklären, wie zu tun, was ich vorgeschlagen habe
Nicht möglich ist.
Kann eine Datei geöffnet werden, mit verschiedenen Arten von Schutz. Excel öffnet die Datei ausschließlich zum Zweck der Schutz der Datei durch ein anderes Programm geändert und dann wieder zurück, wenn Excel speichert es.
Excel konnte die Datei geöffnet haben und dürfen Lesen, aber dann könnten Sie am Ende in einer deadlock-situation, in der zwei Anwendungen haben, die Datei zum Lesen geöffnet ist, und keiner kann etwas sparen, um es zurück.
Andere Lösung, vorgeschlagen von diese Antwort, kopieren Sie die Datei in eine temporäre Datei und öffnen Sie diese.
Verwenden