Ich entwickle einen Zusatzmodul für eine vorhandenene C # (4.0) Anwendung, die zur Datenspeicherung Ionic Zip-Bibliothek verwendet.
In meinem Modul muss ich Daten von Zip-Dateien laden, manipulieren, und zurück schreiben. Meine Routine läuft OK in Unit-Tests, aber wenn sie aus der Host-Anwendung aufgerufen wird,
bekomme ich eine Exception des folgenden Inhalts: "Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird".
Dies geschieht zu einem Programmpunkt, wo ich versuche, die Save()-Funktion des Zip-Archiv aufzurufen.
Ich habe überprüft, welcher Prozess die Datei tatsächlich sperrt, und es sieht so aus, dass dies die Anwendung selbst ist.
Daraus schließe ich, dass es vielleicht eine Art von Interferenz mit dem Host-Programm gibt: zB wird ein File Stream geöffnet, aber nie geschlossen. (BTW, gibt es einige intelligente Techniken, um nach solchen Stellen zu suchen?)
Was mich generell wundert ist, ob ZipFile von Ionic Dateien tatsächlich sperrt/entsperrt, wie im folgenden Codestück:
Nach Save() ist die Anzahl der sperrenden Prozesse gleich 1 (der laufende Prozess selbst), aber nach Dispose() gibt es keine,
was einen auf den Gedanken bringt, dass Ionic.ZipFile offensichtlich einige File Streams intern verwaltet.
An anderen Stellen hat Dispose() jedoch keine Wirkung: Die Zahl der Sperrungen wird nicht dekrementiert.
Danke für Meinungen, Ideen und Tipps,
Alex
In meinem Modul muss ich Daten von Zip-Dateien laden, manipulieren, und zurück schreiben. Meine Routine läuft OK in Unit-Tests, aber wenn sie aus der Host-Anwendung aufgerufen wird,
bekomme ich eine Exception des folgenden Inhalts: "Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird".
Dies geschieht zu einem Programmpunkt, wo ich versuche, die Save()-Funktion des Zip-Archiv aufzurufen.
Ich habe überprüft, welcher Prozess die Datei tatsächlich sperrt, und es sieht so aus, dass dies die Anwendung selbst ist.
Daraus schließe ich, dass es vielleicht eine Art von Interferenz mit dem Host-Programm gibt: zB wird ein File Stream geöffnet, aber nie geschlossen. (BTW, gibt es einige intelligente Techniken, um nach solchen Stellen zu suchen?)
Was mich generell wundert ist, ob ZipFile von Ionic Dateien tatsächlich sperrt/entsperrt, wie im folgenden Codestück:
Code:
ZipFile zf = new ZipFile("test01.zip"); zf.Save(); // FileSystemTools.WhoIsLocking is a utility showing a list pf processes // holding access to a given file // Similar to http://stackoverflow.com/questions/1304/how-to-check-for-file-lock/20623302#20623302 List<Process> processes = FileSystemTools.WhoIsLocking("test01.zip"); Assert.That(processes.Count == 1); zf.Dispose(); processes = FileSystemTools.WhoIsLocking("test01.zip"); Assert.That(processes.Count == 0);
was einen auf den Gedanken bringt, dass Ionic.ZipFile offensichtlich einige File Streams intern verwaltet.
An anderen Stellen hat Dispose() jedoch keine Wirkung: Die Zahl der Sperrungen wird nicht dekrementiert.
Danke für Meinungen, Ideen und Tipps,
Alex
Comment