2017-10-13 3 views
-1

Ich fange eine Ausnahme in meinem Code für einen falschen Dateityp. Dann möchte ich meine Datei ändern und die richtige Datei verwenden. Wie schließe ich die Ausnahme, um in der neuen Datei frisch auszusehen und sie zu verarbeiten?Wie starte ich mit einer neuen Datei

unten ist mein Code. Eins ist eine Hauptfunktion. die zweite ist eine aufgerufene Funktion.

Hauptfunktion.

//data file process button 
    private void button9_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      panel1.Visible = false; // File paths (Admin Access)) 
      panel3.Visible = true; // File process status 
      label6.Visible = true; // label - File process status 
      panel4.Visible = false; // Admin authenticate 

      InitializeFile(); 
      ParseListFileData(); 
      ListArrayFileData(); 
      CleanDesiredData(); 
      GetRRData(); 
      GetLecoData(); 
      //cleanup(); 

      textBox5.Text += "All RR & Leconum data processing from file - " + textfilename + " completed." + "\r\n"; 
      textBox5.Text += "Please click EXIT to close HORIBA program" + "\r\n"; 
     } 
     catch(IndexOutOfRangeException) 
     { 
      //cleanup(); 
      textBox5.Text += "Bad File" + "\r\n"; 
      datafilepath = ""; 
      textBox5.Text += "Select correct file" + "\r\n"; 
     } 
    } 

Die aufgerufene Funktion ParseListFileData();

public void ParseListFileData() 
    { 
     //Opens file and uses for processing 
     System.IO.StreamReader sr = new 
     System.IO.StreamReader(datafilepath); 

     try 
     { 
      //while loop to read file till end of file 
      while (!sr.EndOfStream) 
      { 
       //split data in file into differend fields 
       var Row = sr.ReadLine(); 
       var values = Row.Split(','); 
       ColmnA.Add(values[0]); 
       ColmnB.Add(values[1]); 
       ColmnC.Add(values[2]); 
       ColmnD.Add(values[3]); 
       ColmnE.Add(values[4]); 
       ColmnF.Add(values[5]); 
       ColmnG.Add(values[6]); 
       ColmnH.Add(values[7]); 
       ColmnI.Add(values[8]); 
       ColmnJ.Add(values[9]); 
       ColmnK.Add(values[10]); 
       ColmnL.Add(values[11]); 
       ColmnM.Add(values[12]); 
       ColmnN.Add(values[13]); 
      } 

      sr.Close(); 
      sr.Dispose(); 
     } 
     catch (IndexOutOfRangeException e) 
     { 
      sr.Close(); 
      sr.Dispose(); 
      datafilepath = ""; 
      //cleanup(); 
      //print(e.Message.("Error encountered"); 
      textBox5.Text += "File type not correct or missing data in file "+ e + "\r\n"; 
     } 
    } 

Sobald ich eine neue gute Arbeitsdatei auswählen, scheint die alte Ausnahme geschlossen, aber die alte Datei bleibt nach wie vor im Einsatz und zeigt eine Ausnahme auf einem anderen Funktion. Obwohl ich benutze dispose(), um die Streamreader-Ressourcen zu schließen.

Wie kann ich mit einer neuen Datei neu beginnen.

+0

Was meinen Sie mit dem Schließen der Ausnahme? Sie öffnen oder schließen niemals eine Ausnahme. Sie können sich auf die Datei beziehen. Was wäre geschlossen, wenn Sie die sr.Close() aufrufen. Wenn der Datafile-Pfad nicht gültig ist, behandeln Sie die Ausnahme nicht. Sie sollten die Stream-Deklaration im try-Block verschieben. –

+0

Wenn Sie das Gleiche zweimal machen wollen, aber eine Variable ändern, setzen Sie das Ganze in eine Funktion und übergeben Sie die Variable als Parameter. Dann rufe die Funktion an. O/T, Ihre Kommentare zu dem Code, der auf Ihre Steuerelemente verweist, sind sehr schön zu sehen, aber Sie können noch besser gehen: Im Formular-Designer können Sie die Namen der Steuerelemente selbst ändern: 'panel1' kann in' filePathsPanel' umbenannt werden , beispielsweise. –

+0

Wenn ich eine Ausnahme bekomme, drucke ich einen schlechten Dateityp. Ich möchte, dass der Benutzer den richtigen Dateityp auswählt und es erneut versucht. Wenn jedoch eine neue korrekte Datei verwendet wird, scheint das Programm immer noch auf die alte Datei zu schauen. Wenn ich also das Programm nicht schließe und neu beginne, kann ich keine neue Datei verwenden und sie verarbeiten, selbst nachdem ich die Ausnahme abgefangen habe. Deshalb wollte ich wissen, wie ich mit einer neuen Datei neu anfangen kann, nachdem ich eine Ausnahme gefangen habe – habeebsiddique

Antwort

0

Ich bin nicht sicher, was genau das Problem ist, ist das Dateihandle nicht geschlossen.

ich ein Problem mit Ihrem Code sehen: Sie versuchen und zu fangen, aber nur auf einer bestimmten Ausnahme, sagen Sie eine Argument bekommen, wird dies nicht gefangen werden, sondern können try{}catch{}finaly{}

try 
    { 
     /blabla 
    } 
    catch (IndexOutOfRangeException e) 
    { 

     datafilepath = ""; 
     //cleanup(); 
     //print(e.Message.("Error encountered"); 
     textBox5.Text += "File type not correct or missing data in file "+ e + "\r\n"; 
    } 
    finaly 
    { //this codes always runs wether exception or not. 
     sr.Close(); 
     sr.Dispose(); 
    } 

Alternative verwenden und Eine einfachere Lösung ist die Verwendung von (die automatisch die Verbrauchsmaterialien schließt, wenn sie fertig ist):

+0

Danke für die "Verwendung". Plz siehe Kommentar oben. Ich bekomme nur eine Ausnahme. Aber wenn ich den korrekten Dateityp benutze und versuche, erneut zu verarbeiten, erhalte ich einen Fehler, wenn die Daten der vorherigen Datei noch verwendet werden. wie bewege ich mich darüber. – habeebsiddique