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

  1. 5 weeks ago

    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

  2. Christian S

    Apr 29 Testers, Xojo Pro, XDC Speakers, Third Party Store Germany

    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.

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

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

  5. Sascha S

    Apr 29 Testers, Xojo Pro Germany, Lower Saxony
    Edited 5 weeks ago

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

    Try
    
      ..
    
    Catch err As IOException
     // Error Handling
    End Try

    Und dann teste es auf den verschiedenen Plattformen im Debugger.

    Source: http://docs.xojo.com/IOException

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

  6. Dann käme mein Hinweis, die gleichnamige offene Datei zu schließen 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 Möglichkeit anführen.

  7. Christian S

    Apr 29 Testers, Xojo Pro, XDC Speakers, Third Party Store Germany

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

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

  9. Sascha S

    Apr 29 Testers, Xojo Pro Germany, Lower Saxony

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

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

  10. Sascha S

    Apr 29 Testers, Xojo Pro Germany, Lower Saxony

    @Hardy K Aber zur Not muss ich wohl die allgemeine IOException fangen und den spezifischen Fall als Möglichkeit anführen.

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

  11. Carsten B

    Apr 30 Testers, Xojo Pro Germany, NRW, Europe

    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.

or Sign Up to reply!