exception für den Versuch, ein aktuell benutztes file zu überschreiben

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).

Bin für jede Hilfe dankbar

was für Funktionen benutzt ihr?

Du kannst selber mit f.exists schauen, ob die Datei da ist.
Oder bei BinaryStream.Create noch ein true übergeben zum Überschreiben.

f=dlg.ShowModal()
If f <> Nil Then
#Pragma BreakOnExceptions Off
Try
excelOut = TextOutputStream.Create(f) --> hier wird die exception geworfen

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.

Geht denn folgendes nicht? Oder habe ich die Frage nicht richtig verstanden?

[code]Try

Catch err As IOException
// Error Handling
End Try[/code]

Und dann teste es auf den verschiedenen Plattformen im Debugger.

Source: http://documentation.xojo.com/api/exceptions/ioexception.html

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.

Schau dir mal die Fehlernummer an, die in der Exception mit kommt.

Beim Mac ist es Nr 35. Ich werde allerdings nicht schlau daraus.

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. :slight_smile:

Ich halte das i.d.R. für den Normalfall. (So lange wir nicht von einer generelleren Variante wie z.B. einer RuntimeException sprechen) :wink:

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.