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.