none
Datei läßt sich nicht öffnen... RRS feed

  • Frage

  • Hallo zusammen,

    ich arbeite mit VB2010 unter XP und habe folgendes Problem:

    Nach dem Start meines Programms frage ich ab, ob eine bestimmte Datei existiert, wenn nicht, wird sie angelegt mit folgenden Code

    If File.Exists(Application.StartupPath  & "\protokoll.txt")  = False Then
    File.Create(Application.StartupPath  & "\protokoll.txt", FileOptions .RandomAccess)
    End If

    Etwas weiter im Programm möchte ich dann diese leere Datei öffnen mit

    sText  = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\protokoll.txt")


    "Der Prozess kann nicht auf die Datei ... zu greifen, da sie von einem anderen Prozess verwendet wird."

    Welcher andere Prozess ist das? Wie vermeide ich diese Fehlermeldung?

    Danke fürs Nachdenken.

    Gruß

    Manfred

    Freitag, 23. September 2011 08:11

Antworten

  • Hallo Manfred,

    File.Create erstellt eine neue Datei und liefert den geöffneten Stream dieser Datei, so dass Du in diese Datei schreiben kannst. Es ist also Dein eigener Prozess, der die Datei in Beschlag hält. Du musst die Datei nach dem Create wieder schließen, wenn Du diesen Fehler vermeiden möchtest:

    File.Create(Application.StartupPath & "\protokoll.txt", FileOptions.RandomAccess).Dispose()
    

    Ist aber wenig sinnvoll, insbesondere der Versuch eine leere Datei lesen zu wollen. Sinnvoller erscheint da, die Datei nur dann zu lesen, wenn sie auch existiert:

    Dim lPath As String = Path.Append(Application.StartupPath, "protokoll.txt")
    
    If File.Exists(lPath) Then 
         sText = My.Computer.FileSystem.ReadAllText(lPath)
    End If 
    
    Und die Datei dann auch nur zu erstellen, wenn etwas hineingeschrieben wird. Leere Dateien braucht kein Mensch.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Freitag, 23. September 2011 08:30
    Moderator

Alle Antworten

  • Hallo Manfred,

    File.Create erstellt eine neue Datei und liefert den geöffneten Stream dieser Datei, so dass Du in diese Datei schreiben kannst. Es ist also Dein eigener Prozess, der die Datei in Beschlag hält. Du musst die Datei nach dem Create wieder schließen, wenn Du diesen Fehler vermeiden möchtest:

    File.Create(Application.StartupPath & "\protokoll.txt", FileOptions.RandomAccess).Dispose()
    

    Ist aber wenig sinnvoll, insbesondere der Versuch eine leere Datei lesen zu wollen. Sinnvoller erscheint da, die Datei nur dann zu lesen, wenn sie auch existiert:

    Dim lPath As String = Path.Append(Application.StartupPath, "protokoll.txt")
    
    If File.Exists(lPath) Then 
         sText = My.Computer.FileSystem.ReadAllText(lPath)
    End If 
    
    Und die Datei dann auch nur zu erstellen, wenn etwas hineingeschrieben wird. Leere Dateien braucht kein Mensch.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Freitag, 23. September 2011 08:30
    Moderator
  • Hallo Thorsten,

    habe es verstanden und entsprechend geändert.

    Vielen Dank dafür.

    Gruß Manfred

    Freitag, 23. September 2011 08:40