Adressbuch



  • Guten Abend.
    Ich habe mal eine Frage. Sind hier auch Leute die BASIC können und mir sagen können, warum dieser Code nicht funktionert:

    Imports System
    Imports System.Text
    Imports System.IO
    
    Module Suchvariablen
        Public search_name As String
        Public search_adresse As String
        Public search_nummer As String
    End Module
    
    Module Speichervariablen
        Public p_name As String
        Public p_adresse As String
        Public p_nummer As String
    End Module
    
    Public Class PeopleBook
        Public i As Integer
        Public pfad As String
        Public datei As String
    
        Private Function FormRefresh()
            TBMemory.Text = ""
            TBName.Text = ""
            TBNumber.Text = ""
            TBStreet.Text = ""
        End Function
    
        Private Sub PeopleBook_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub SaveData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveData.Click
            If TBMemory.Text <> "" Then
                i = TBMemory.Text
                Speichervariablen.p_name = TBName.Text
                Speichervariablen.p_adresse = TBStreet.Text
                Speichervariablen.p_nummer = TBNumber.Text
    
                datei = i & ".txt"
                pfad = My.Application.Info.DirectoryPath & "\Adressen"
    
                If File.Exists(pfad & datei) Then
                    If MsgBox("Diese Datei existiert bereits!" & vbCrLf & "OK überschreibt die Datei" & vbCrLf & "Abbrechen lässt Sie ihre Eingaben korrigieren", vbQuestion + vbOKCancel, "Achtung") = vbOK Then
                        File.Delete(pfad & datei)
    
                        Dim StreamWriter As StreamWriter = New StreamWriter(pfad & datei)
                        StreamWriter.WriteLine(i)
                        StreamWriter.WriteLine(Speichervariablen.p_name)
                        StreamWriter.WriteLine(Speichervariablen.p_adresse)
                        StreamWriter.WriteLine(Speichervariablen.p_nummer)
                        StreamWriter.Close()
                    End If
                End If
            Else
                MsgBox("Sie müssen alle Daten angeben!", vbCritical + vbOK, "Achtung!")
            End If
        End Sub
    
        Private Sub SearchName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchName.Click
            FormSearchName.Show()
    
            Dim i As Integer
    
            For i = 1 To 100
                Dim datei As String = i & ".txt"
                Dim pfad As String = "Daten\"
    
                If File.Exists(pfad & datei) Then
                    Dim StreamReader As StreamReader = New StreamReader(pfad & datei)
                    TBMemory.Text = StreamReader.ReadLine()
                    TBName.Text = StreamReader.ReadLine()
                    TBStreet.Text = StreamReader.ReadLine()
                    TBNumber.Text = StreamReader.ReadLine()
    
                    If TBName.Text = Suchvariablen.search_name Then
                        StreamReader.Close()
                    End If
                End If
            Next i
        End Sub
    
        Private Sub SearchStreet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchStreet.Click
            FormSearchStreet.Show()
    
            Dim i As Integer = 1
    
            For i = 1 To 100
                Dim datei As String = i & ".txt"
                Dim pfad As String = "Daten\"
    
                If File.Exists(pfad & datei) Then
                    Dim StreamReader As StreamReader = New StreamReader(pfad & datei)
                    TBMemory.Text = StreamReader.ReadLine()
                    TBName.Text = StreamReader.ReadLine()
                    TBStreet.Text = StreamReader.ReadLine()
                    TBNumber.Text = StreamReader.ReadLine()
    
                    If TBName.Text = Suchvariablen.search_adresse Then
                        StreamReader.Close()
                    End If
                End If
            Next i
        End Sub
    
        Private Sub SearchNumber_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchNumber.Click
            FormSearchNumber.Show()
    
            Dim i As Integer = 1
    
            For i = 1 To 100
                Dim datei As String = i & ".txt"
                Dim pfad As String = "Daten\"
    
                If File.Exists(pfad & datei) Then
                    Dim StreamReader As StreamReader = New StreamReader(pfad & datei)
                    TBMemory.Text = StreamReader.ReadLine()
                    TBName.Text = StreamReader.ReadLine()
                    TBStreet.Text = StreamReader.ReadLine()
                    TBNumber.Text = StreamReader.ReadLine()
    
                    If TBName.Text = Suchvariablen.search_nummer Then
                        StreamReader.Close()
                    End If
                End If
            Next i
        End Sub
    
        Private Sub MeRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MeRefresh.Click
            FormRefresh()
        End Sub
    End Class
    

    Das Problem dabei ist, dass die Dateien nicht erstellt werden. In einer früheren Verision funktionierte das auch einmal sehr gut.

    Schonmal Danke im Voraus.

    3P!CF4!L



  • 3P!CF41L schrieb:

    Private Sub SaveData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveData.Click
            If TBMemory.Text <> "" Then
                i = TBMemory.Text
                Speichervariablen.p_name = TBName.Text
                Speichervariablen.p_adresse = TBStreet.Text
                Speichervariablen.p_nummer = TBNumber.Text
    
                datei = i & ".txt"
                pfad = My.Application.Info.DirectoryPath & "\Adressen"
    
                If File.Exists(pfad & datei) Then
                    If MsgBox("Diese Datei existiert bereits!" & vbCrLf & "OK überschreibt die Datei" & vbCrLf & "Abbrechen lässt Sie ihre Eingaben korrigieren", vbQuestion + vbOKCancel, "Achtung") = vbOK Then
                        File.Delete(pfad & datei)
    
                        Dim StreamWriter As StreamWriter = New StreamWriter(pfad & datei)
                        StreamWriter.WriteLine(i)
                        StreamWriter.WriteLine(Speichervariablen.p_name)
                        StreamWriter.WriteLine(Speichervariablen.p_adresse)
                        StreamWriter.WriteLine(Speichervariablen.p_nummer)
                        StreamWriter.Close()
                    End If
                End If
            Else
                MsgBox("Sie müssen alle Daten angeben!", vbCritical + vbOK, "Achtung!")
            End If
        End Sub
    

    Wo ist hier die Behandlung des Falls "Datei nicht vorhanden"? Bislang überschreibst du nur, aber du erzeugst nicht neu.



  • OK. Ich habe jetzt die meisten Probleme gelöst. Aber ich habe noch ein Problem:
    Wenn ich erst die Datei schreibe und dann danach versuche, Sie zu lesen, sagt mir VB, dass schon ein anderer Prozess auf die Datei zugreift. Wie löse ich das?

    @_matze: Du hast mir übrigens sehr geholfen. Ich habe einfach nach dem umschreiben vergessen, die Funktion wieder zu schreiben.



  • 3P!CF41L schrieb:

    Wenn ich erst die Datei schreibe und dann danach versuche, Sie zu lesen, sagt mir VB, dass schon ein anderer Prozess auf die Datei zugreift. Wie löse ich das?

    Musst du dein Datei-Objekt zum Lesen vielleicht erst schließen? Zeig mal her.


Anmelden zum Antworten