none
Datei anlegegen und auslesen "Datei im Zugriff" RRS feed

  • 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.

    Sonntag, 26. September 2010 14:30

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.^^

    Dienstag, 17. Mai 2016 15:22

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 )

    Sonntag, 26. September 2010 14:51
  • 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
            }

    Sonntag, 26. September 2010 14:59
  •  

    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 ?

    Sonntag, 26. September 2010 17:35
  • 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.^^

    Dienstag, 17. Mai 2016 15:22