我测了如下一段代码,发现有bug:        private void Func()
        {
            FileStream fs= new FileStream("C:\\1.txt", FileMode.Open);
            StreamReader reader = new StreamReader(fs,true);
            TestBug(fs, reader);
            fs.Close();
            fs.Dispose();
            reader.Close();
        }        private void TestBug(FileStream fs, StreamReader reader)
        {
            fs.Close();
            fs = new FileStream("C:\\1.txt", FileMode.Open);
            //To do..
        }第二次调用Func()的时候提示文件已经被占用;如果不直接传入FileStream而是在调用函数之前将其关闭,结束函数后再次将其打开就没这问题。也就是说在TestBug(fs,reader)里面fs没有被关闭;那么请问如何在函数里面对FileStream进行正确的关闭释放操作?

解决方案 »

  1.   

    TestBug,再次创建了fs,如果fs没关闭,就不用再次new了
      

  2.   

    你把FileStream fs传到TestBug()方法里,怎么又New了一遍
      

  3.   


    private void TestBug(FileStream fs, StreamReader reader)
      {
      fs.Close();
      fs = new FileStream("C:\\1.txt", FileMode.Open);
      //To do..
      }
    你这样会导致指向两个不一样的对象,应该加上ref
    private void TestBug(ref FileStream fs, StreamReader reader)
      {
      fs.Close();
      fs = new FileStream("C:\\1.txt", FileMode.Open);
      //To do..
      }
    再试试
      

  4.   


    啊。。这个方法是可用的,原来是产生了两个不一样的FileStream,请问如果要理解的更清楚的话可用查阅哪些资料呢?谢谢。我接触C#不多,对于这些方面的东西所知甚少。
      

  5.   


    private void Func()
      {
        using(FileStream fs= new FileStream("C:\\1.txt", FileMode.Open))
        using(StreamReader reader = new StreamReader(fs,true))
        {
          TestBug(fs, reader);
        }
      }  private void TestBug(FileStream fs, StreamReader reader)
      {
        //To do..
      }