playmen
Goto Top

Visual Basic 2013 Fehler: Der Prozess kann nicht auf die Datei zugreifen

Hallo

Ich erkläre euch mal was mein Programm tun soll.
Ich mache ein Login Tool welches anhand Einstellungen (welche man im Skript ändern kann) Netzlaufwerke mappen soll.
Auf der Form1.vb ist das Anmeldefenster mit Benutzername und Passwort Eingabe. Wenn man auf dieser Form auf einen Knopf drückt öffnet sich settings.vb welches ein Anpassungsfenster sein soll. In dem kann man Textbox weise Netzwerkbuchstabe, Servername und Freigabepfad eintragen.

Jetzt ist es so das wenn das Main geladet wird, sprich form1.vb soll eine kleine überprüfung stadtfinden und zwar diese

Dim var_pfad_textfile = "C:\Users\Public\Login tool\domain.txt"
Dim var_pfad_laufwerk = "C:\Users\Public\Login tool\laufwerk.txt"
Dim var_pfad_server = "C:\Users\Public\Login tool\server.txt"
Dim var_pfad_pfad = "C:\Users\Public\Login tool\pfad.txt"

If System.IO.Directory.Exists("C:\Users\Public\Login tool") = False Then

System.IO.Directory.CreateDirectory("C:\Users\Public\Login tool")

End If


'notwendige Dateien erstellen, falls nicht existiert


If System.IO.File.Exists(var_pfad_textfile) = False Then

System.IO.File.Create(var_pfad_textfile)

End If


If System.IO.File.Exists(var_pfad_laufwerk) = False Then

System.IO.File.Create(var_pfad_laufwerk)

End If

If System.IO.File.Exists(var_pfad_pfad) = False Then

System.IO.File.Create(var_pfad_pfad)

End If

If System.IO.File.Exists(var_pfad_server) = False Then

System.IO.File.Create(var_pfad_server)

End If

Das ist für die Erstellung des Config Ordners und der Textfile indem die Datensätze aus settings.vb gespeichert werden sollen.
Das klappt wunderbar.

Weiter soll es wenn ich in der Vergangenheit was eingetragen habe soll es wenn ich settings.vb öffne diese bereits eintragen (das ich nicht immer alles nochmals Schreiben muss)

Der Befehl zum aus settings.vb in die Textfiles zu schreiben sieht jeweils so aus.


Dim Daten_Speichern_l As IO.StreamWriter = New IO.StreamWriter("C:\Users\Public\Login tool\laufwerk.txt") 'Hier beim Pfad kommt euer Speicherort der Textdatei rein WICHTIG! Den Namen mit .txt nicht vergessen
Daten_Speichern_l.WriteLine(lb_01.Text)
Daten_Speichern_l.WriteLine(lb_02.Text)
Daten_Speichern_l.WriteLine(lb_03.Text)

lb_01,lb_02 und lb_03 ist das Feld mit dem Laufwerkbuchstabe.

Das gleiche mit dem Servernamen:

Dim Daten_Speichern_s As IO.StreamWriter = New IO.StreamWriter("C:\Users\Public\Login tool\server.txt")
Daten_Speichern_s.WriteLine(sn_1.Text)
Daten_Speichern_s.WriteLine(sn_2.Text)
Daten_Speichern_s.WriteLine(sn_3.Text)

Feld für Servername.

Und für den Pfad

Dim Daten_Speichern_3 As IO.StreamWriter = New IO.StreamWriter("C:\Users\Public\Login tool\pfad.txt")
Daten_Speichern_3.WriteLine(fp_1.Text)
Daten_Speichern_3.WriteLine(fp_2.Text)
Daten_Speichern_3.WriteLine(fp_3.Text)


Der Befehl um aus den Textdateien jeweils zu lesen lautet für alle 3 so:
Dim var_pfad_laufwerk = "C:\Users\Public\Login tool\laufwerk.txt"

Dim Daten_Lesen_elaufwerk() As String = IO.File.ReadAllLines(var_pfad_laufwerk) 'Hier ist der Speicherort der Textdatei
lb_01.Text = Daten_Lesen_elaufwerk(0) 'Die erste Zeile ist 0
lb_02.Text = Daten_Lesen_elaufwerk(1)
lb_03.Text = Daten_Lesen_elaufwerk(2)


Das Problem ist folgendes:
Immer beim 1. Ausführen des Skriptes werden ja die Ordner und Textdateien erstellt. Das Funktioniert. Danach öffne ich die Settings und Schreibe die Daten ein. Wenn ich es schließe und nochmals öffne sollten ja alle Daten welche ich bereits rein geschrieben habe da sein. Falsch.
Wenn ich in die Textdateien reinschaue ist da nichts drin.

Der Fehler ist das, dass Programm gar nicht reinschreiben kann weil es von einem anderen Prozess verwendet wird.

Das komische ist, wenn die Ordner bereits existieren also das Skript keine erstellen muss klappt alles.

Ich gehe davon aus das etwas mit dem erstellen Befehl falsch ist..

Kann mit jemand helfen?

Für Fragen zum Programm bin ich offen.


Gruass

Content-ID: 268475

Url: https://administrator.de/contentid/268475

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

Snuffchen
Snuffchen 07.04.2015 um 10:11:28 Uhr
Goto Top
Du musst den Stream auch wieder schließen bevor du die Datei auslesen willst!

Daten_Speichern_l.close
Daten_Speichern_s.close
playmen
playmen 07.04.2015 um 10:18:07 Uhr
Goto Top
sorry, Ich wollte nicht alles einfügen um Platz zu sparen aber in meinem Programm schließe ich den Stream auch mit dem Befehl welchen du mir gesendet hast.

Das ist nicht der Fehler..
114757
114757 07.04.2015 aktualisiert um 12:47:29 Uhr
Goto Top
Zitat von @playmen:

sorry, Ich wollte nicht alles einfügen um Platz zu sparen aber in meinem Programm schließe ich den Stream auch mit dem
Befehl welchen du mir gesendet hast.
Moin,
dann poste doch bitte mal komplett, sonst können wir uns hier nen Wurm raten was du sonst noch machst wo dein Fehler liegen könnte ...

Gruß jodel32

p.s. Der Debugger ist dein Freund !
playmen
playmen 07.04.2015 um 15:47:42 Uhr
Goto Top
Habe es herausgefunden.

ich musste .Dispose() am ende des Befehles "System.IO.Directory.CreateDirectory("C:\Users\Public\Login tool")" anfügen

also es muss so aussehen.

System.IO.Directory.CreateDirectory("C:\Users\Public\Login tool").Dispose()

bei den Textdokumenten muss das auch jedesmal stehen
114757
114757 07.04.2015 aktualisiert um 17:35:07 Uhr
Goto Top
Zitat von @playmen:
ich musste .Dispose() am ende des Befehles "System.IO.Directory.CreateDirectory("C:\Users\Public\Login tool")"
anfügen

Ja nee, dafür gibt's using dann kommt sowas gar nicht erst vor face-wink
https://msdn.microsoft.com/de-de/library/htd05whh.aspx

Und für den Streamwriter muss vorher kein File existieren, der erzeugt das File selber wenn es nicht vorhanden ist.