Benutzer mit den meisten Antworten
Datei anlegegen und auslesen "Datei im Zugriff"

Frage
-
Habe ein zugriffproblem - beim Öffnen kommt die Meldung das die Datei im zugriff ist.
Erstellen mit folgender Syntax eine Datei:
FileInfo FI = new FileInfo(@"config.conf"); FileStream FS = FI.Create();
Später lese ich die datei wieder aus mit dem folgenden Syntax:
string[] readLines = File.ReadAllLines(@"config.conf", Encoding.Default); textBox_host1.Text = readLines[0]; //Host 1 textBox_host2.Text = readLines[1]; //Host 2 textBox_host3.Text = readLines[2]; //Host 3 textBox_host4.Text = readLines[3]; //Host 4 textBox_host5.Text = readLines[4]; //Host 5 textBox_host6.Text = readLines[5]; //Host 6 textBox_internet.Text = readLines[6]; //Internet URL
Jetzt kommt beim Starten des Programmes nach dem erstellen der exe , ein zugriff fehler , das die datei schon im zugriff ist.
Kann ich das irgedwie verhindern ?
Ist die Syntax denn richtig - die Datei soll im Aktuellen Verzeichnis liegen wo auch die EXE zu finden ist.
Antworten
-
Hallo Basti
für ihn ist CreateText = null und kein IEnumerable<string> bzw string[] prüfe vorher ob CreateText != null ist und führe diese zeile nur aus falls CreateText != null ist^^
Zu dem (zur frage davor) solltest du prüfen ob readLines überhaupt 7 elemente hat ("if(readLines.Lenght == 7)")
oder prüfe es vor jedem einzeln: 'textBox_host1.Text = (readLines.Lenght >= 1) ? readLines[0] : "";',
'textBox_host2.Text = (readLines.Lenght >= 2) ? readLines[1] : "";',
und so weiter
dann sollten keine Fehler mehr entstehen.^^
- Als Antwort vorgeschlagen DragonSkills99 Mittwoch, 18. Mai 2016 13:27
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 19. Dezember 2016 13:23
Alle Antworten
-
Hallo B
leider fehlen Angaben, bei welcher Zeile der Zugriffehler auftritt!
Eine Ursache, zu
FileStream FS = FI.Create();
sollte wenn fertig beschrieben sicher ein FS.Dispose() dazu (oder using-Pattern).
http://msdn.microsoft.com/de-de/library/ms227422.aspx
http://msdn.microsoft.com/de-de/library/3bwa4xa9.aspx
Dein Satz "die Datei soll im Aktuellen Verzeichnis liegen" (working dir; oder auch relative Pfade) ist immer 'heikel' (und oft Sicherheitsrisiko), zu Laufzeit müssen absolute Pfade zum Zuge kommen.
(in deinem Fall vielleicht per Application.StartupPath ) -
Bekomme jetzt den Fehler:
Eine nicht behandelte Ausnahme des Typs "System.IndexOutOfRangeException" ist in Ping_Tool.exe aufgetreten.
Zusätzliche Informationen: Der Index war außerhalb des Arraybereichs.bei der Programmzeile
private void button_konfig_einlesen_Click(object sender, EventArgs e)
{
string[] readLines = File.ReadAllLines(@"c:\config.conf", Encoding.Default);
textBox_host1.Text = readLines[0]; //Host 1
textBox_host2.Text = readLines[1]; //Host 2
textBox_host3.Text = readLines[2]; //Host 3
textBox_host4.Text = readLines[3]; //Host 4
textBox_host5.Text = readLines[4]; //Host 5
textBox_host6.Text = readLines[5]; //Host 6
textBox_internet.Text = readLines[6]; //Internet URL
} -
Später beim speichern mit dem folgenden Syntax
File.WriteAllLines(@"C:\config.conf",CreateText,Encoding.Default);
bekomme ich einen fehler
Eine nicht behandelte Ausnahme des Typs "System.ArgumentNullException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Der Wert darf nicht NULL sein.Reicht die eine Zeile oder fehlt da noch was ?
-
Hallo Basti
für ihn ist CreateText = null und kein IEnumerable<string> bzw string[] prüfe vorher ob CreateText != null ist und führe diese zeile nur aus falls CreateText != null ist^^
Zu dem (zur frage davor) solltest du prüfen ob readLines überhaupt 7 elemente hat ("if(readLines.Lenght == 7)")
oder prüfe es vor jedem einzeln: 'textBox_host1.Text = (readLines.Lenght >= 1) ? readLines[0] : "";',
'textBox_host2.Text = (readLines.Lenght >= 2) ? readLines[1] : "";',
und so weiter
dann sollten keine Fehler mehr entstehen.^^
- Als Antwort vorgeschlagen DragonSkills99 Mittwoch, 18. Mai 2016 13:27
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 19. Dezember 2016 13:23