# VB 2010 - Problem txt-Datei anlegen und schreiben



## Sinix (27 November 2012)

Hi, I need help !

Ich möchte in Visual Basic eine txt-Datei anlegen und etwas reinschreiben.
Leider tritt immer wieder der Fehler, wie im Anhang zu sehen auf 
Nach dem Erstellen mit Create kommt beim Öffnen ein Abbruch mit dem
Hinweis das bereits ein anderer Prozess auf die Datei zugreift. 
Aber ich erstelle die Datei ja gerade neu, also kann ja kaum ein anderer Prozess zugreifen.
Was ist hier faul?
Kann mir jemand helfen, gerne auch anderen Weg?

MfG MK


----------



## Lupo (27 November 2012)

Bei mir sieht das so aus :
	
	



```
''' <summary>
    ''' Laden der Programm-Parameter  
    ''' </summary>
    Public Sub Parameter_Laden()
        Dim Z, varListe() As String
        Dim i As Integer
        Dim Verzeichnis As String = GetFolderPath(SpecialFolder.ApplicationData) 
        If Not FolderExists(Verzeichnis) Then
            My.Computer.FileSystem.CreateDirectory(Verzeichnis)
        End If
        Dim Datei As String = Verzeichnis + "\Daten.PAR"
        Try
            Dim fs As New FileStream(Datei, FileMode.Open,FileAccess.ReadWrite)
            Dim CSV As New StreamReader(fs)
            For i = 1 To 4
                Z = CSV.ReadLine  '  Header-Zeilen  
            Next
                   CSV.Close()
            RaiseEvent Parameter_geladen()
        Catch ex As Exception
        End Try
    End Sub
    ''' <summary>
    ''' Abspeichern der Programm-Parameter  
    ''' </summary>
    Public Sub Parameter_Speichern()
        Dim Verzeichnis As String = GetFolderPath(SpecialFolder.ApplicationData) 
        If Not FolderExists(Verzeichnis) Then
            My.Computer.FileSystem.CreateDirectory(Verzeichnis)
        End If
        Dim Datei As String = Verzeichnis + "\Daten.PAR"
        Try
            Dim fs As New FileStream(Datei, FileMode.Create, FileAccess.ReadWrite)
            Dim CSV As New StreamWriter(fs)
            CSV.WriteLine("Programm-Parameter :")
            CSV.WriteLine("--------------------")
            CSV.WriteLine("Stand : " + DatumString() + "   " + Strings.Left(TimeString, 5))
            CSV.WriteLine("--------------------")
                CSV.Close()
        Catch ex As Exception
        End Try
    End Sub
    ''' <summary>
    ''' Überprüfen, ob das Zielverzeichnis vorhanden ist  
    ''' </summary>
    Public Function FolderExists(ByVal FolderPath As String) As Boolean
        Dim f As New IO.DirectoryInfo(FolderPath)
        Return f.Exists
    End Function
    ''' <summary>
    ''' Überprüfen, ob die Zieldatei vorhanden ist  
    ''' </summary>
    Public Function FileExists(ByVal FileFullPath As String) As Boolean
        Dim f As New IO.FileInfo(FileFullPath)
        Return f.Exists
    End Function
```
Sieht auf Grund der anderen Befehle etwas anders aus als bei dir.
Die Sache mit den Namespace-Angaben kannst du durch IMPORTS umgehen. dann wird der Code etwas besser lesbar - finde ich.


----------



## Sinix (27 November 2012)

Lupo schrieb:


> Bei mir sieht das so aus :
> ...
> Sieht auf Grund der anderen Befehle etwas anders aus als bei dir.
> Die Sache mit den Namespace-Angaben kannst du durch IMPORTS umgehen. dann wird der Code etwas besser lesbar - finde ich.



Danke es funktioniert! 
Bin nu nicht so der Hochsprachler, hab mal System.IO importiert.
Benutze zu oft "Call", das scheint nicht so günstig


----------



## bits'bytes (27 November 2012)

Mäuseklavier schrieb:


> Hi, I need help !
> 
> Was ist hier faul?
> 
> MfG MK



Wenns funktioniert ist eh alles gut. Habe nur die Idee dass dir wahrscheinlich einfach ein Close fehlt (vor dem StreamWriter Zugriff). 

Die Create Function erzeugt und öffnet die Datei - der StreamWriter ist dann im Prinzip wieder ganz was neues und versucht auf eine geöffnete Datei zuzugreifen.

Nur eine Vermutung....

bg
bb


----------



## Sinix (27 November 2012)

Da liegst du nicht ganz falsch, das wollte ich auch probieren.
Problem ist das ich System.IO.Create mit Call ohne Objekt aufgerufen hatte,
was soll ich dann schließen


----------



## mogel (27 November 2012)

Moin,


```
Catch ex As Exception
End Try
```

bitte wenigstens die Exception ausgeben, sonst sucht ihr euch einen Wolf wenn es plötzlich nicht mehr funktioniert


```
Catch ex As Exception
    Console.WriteLine(ex.Message) ' oder so ähnlich
End Try
```

hand, mogel


----------

