Hallo,
ich möchte in meiner App die Möglichkeit zur Verfügung stellen, eine Wertetabelle (Listbox) als .csv-Datei abzuspeichern. Wenn der User nun aber den Namen einer bereits in Excel verwendeten Datei verwenden möchte und im Dialog “überschreiben” anklickt, erhalte ich eine IOException mit der Errornr. 35. Ich würde diese Exception nun gerne vor der allgemeinen IO-Exception extra fangen, weiß aber nicht welchen Namen ich hierfür verwenden kann (Catch e As ???). FileInUseException funktioniert leider nicht. Gibt es für diesen Fall eine Bezeichnung, die für alle Betriebssysteme funktioniert (Mac, Windows und Raspi).
Das Problem tritt dann auf, wenn eine gleichnamige Datei nicht nur existiert (die wird klaglos überschrieben), sondern bereits benutzt wird. Dann wird sie nicht überschrieben und es kommt auch keine Dialogbox, die den User darauf hinweist. Das wollte ich mit meiner MessageBox im ersten Catch erledigen.
In einer App die ich in diesem Moment unter Windows 10 einsetze, steht im Fall das ich eine geöffnete Datei überschreiben möchte, der Fehler 32 im Windows Ereignisprotokoll. Aufgrund meiner Art der System.Log protokollierung sieht das dann so aus “OTRSDatenbank.DB_OTRS_LoadAttachment - Error Number: 32”.
Dann kme mein Hinweis, die gleichnamige offene Datei zu schlieen oder den Namen zu ndern, bei jeder IOEXception. Ich wollte daher gerne einen spezifischeren Catch voranstellen. IOFileLoadException habe ich in’s Blaue auch schonmal ausprobiert, war leider auch nicht richtig.
Aber zur Not muss ich wohl die allgemeine IOException fangen und den spezifischen Fall als Mglichkeit anfhren.
Das meine ich. Schau Dir die Exception im Catch Block an und entscheide dort aufgrund des Codes (diese ändern sich in der Regel nicht innerhalb eines Systems) wie Du mit der Ausnahme umgehen möchtest.
Warum prüfst Du nicht vor Create(), ob die Datei existiert. Falls ja, dann versuch sie zu löschen. Das musst Du doch sowieso, da m. W. TextOutputStream.Create() niemals eine Datei tatsächlich überschreibt.