Zugriff auf Textdatei erzeugt manchmal Fehler: Unbehandelte Ausnahme

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zugriff auf Textdatei erzeugt manchmal Fehler: Unbehandelte Ausnahme

    Hallo zusammen, ich hab eine Textdatei mit mehreren Usernamen worauf mehrere Personen lesend und schreibend zugreifen. Nicht immer, aber vermtl. wenn zwei User gleichzeitig zugreifen erhalte ich den Fehler: Unbehandelte Ausnahme... Prozess kann auf die Datei nicht zugreifen, da sie von einem anderen Prozess verwendet wird siehe Screenshot. Kann man diesen Fehler unterdrücken oder abfangen? Ich such schon ewig im Netz, hab aber leider keine vernünftige Lösung gefunden.
    Bilder
    • Screenshot.png

      112,55 kB, 691×290, 37 mal angesehen
    Hi, ich öffne folgendermaßen:

    VB.NET-Quellcode

    1. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    2. Me.Location = New Point(50, 50)
    3. merk1 = ""
    4. If System.IO.File.Exists("c:\helpndoc\Name.txt") Then
    5. fileReader = My.Computer.FileSystem.ReadAllText("c:\helpndoc\Name.txt")
    6. merk1 = fileReader
    7. End If
    8. For Each line In IO.File.ReadLines("\\sde01006\UHD\_AATest\Status.txt")
    9. LogLaden.Items.Add(line)
    10. Next


    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Stell sicher das die Datei nicht von mehreren Programmen gleichzeitig verwendet wird. Da scheint ein Programm drauf zuzugreifen, oder ein FileHandle wurde nicht aus dem System entfernt. Warum mal My.Computer und mal IO.File? Vergiss den My Namespace, nimm IO.File.

    Wenn du das so machst, wird dird unterliegende FileStream beim disposen freigegeben:

    VB.NET-Quellcode

    1. If System.IO.File.Exists("x.txt") Then
    2. Try
    3. Using streamReader As New System.IO.StreamReader(New System.IO.FileStream("x.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
    4. Dim content As String = streamReader.ReadToEnd()
    5. End Using
    6. Catch ex As IOException
    7. MessageBox.Show(ex.Message)
    8. End Try
    9. End If

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Hi, gleich mal Danke für Deine Postings :) Wenn ich richtig verstehe wird bei Fehler dann die MessageBox angezeigt oder? Ich bräuchte aber eine Lösung dass das o.g. Fehlerfenster (im Screenshot) gar nicht auftaucht oder ein Klick auf WEITER simuliert wird. Soll ich Dir Screens und genauere Beschreibung posten? LG Reiner

    beanbear6 schrieb:

    gar nicht auftaucht
    Dazu musst Du im Quellcode da einen Try-Catch-Block schreiben und genau diese Exception abfangen.
    Deine Herangehensweise des Ignorierens ist nicht unbedingt zielführend.
    Ich halte es für besser, die Ursache zu ergründen:
    - Wer hat diese Datei geöffnet?
    - Ist das Öffnen der Datei nicht sauber programmiert?
    - Kann sie geschlossen werden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das oben genannte Fenster wird dann nicht angezeigt. Ob du dann eine MessageBox anzeigst oder nicht....


    Solltest jedenfalls die Ursache abstellen, aber wenn die Datei nicht geöffnet werden konnte, kann man durchaus eine Meldung zeigen. Sonst wird gewartet, gewartet und nichts passiert.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Wenn du genau weist, dass ein anderer User die Datei gerade behandelt, könntest du ev. kurz ohne Ausgabe einer Meldung warten und es dann nocheinmal versuchen...
    Es stellt sich aber die Frage, wie lange diese Datei vom anderen Benutzer blockiert werden kann - wenn das ewig dauert, kommst du ohne Hinweis-Meldung nicht davon.

    Neu

    beanbear6 schrieb:

    habs nun mal so hinbekommen
    Teilst Du uns mit, wo der Fehler lag, falls noch jemand diesen Effekt hat?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!