我如何从一个新文件开始新鲜

时间:2017-10-13 19:00:48

标签: c# exception

我在代码中捕获了一个错误文件类型的异常。然后我想更改我的文件并使用正确的文件。如何关闭execption以查看新文件并处理它。

下面是我的代码。一个是主要功能。第二个是被叫函数。

主要功能。

  //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";
        }
    }

被叫函数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";
         }
    }

一旦我选择了一个新的良好工作文件,旧的异常似乎已关闭,但旧文件仍然在使用并在另一个函数中显示异常。即使我使用dispose()来关闭streamreader资源。

如何使用新文件重新开始。

1 个答案:

答案 0 :(得分:0)

我不确定究竟是什么问题,文件句柄是否未关闭。

我发现您的代码存在问题:您尝试捕获,但只有特定的异常,比如说您收到ArgumentException,这不会被捕获,而是可以使用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();
     }

替代且更容易的解决方案是使用(完成后自动关闭一次性用品):

using(var sr = new System.IO.StreamReader(datafilepath);) {
    //try catch in here. even is something goes horribly wrong. StreamReader = fileHandle will be closed.
}