现在流能成功的写入,不过,每次写完流都要关闭才行。当我再次使用用流的时候,它就会出错
StreamWriter sw = new StreamWriter(filepath);
sw.WriterLine("ErrorLog.....");
sw.Close();
这样写是没有问题的,但是当我下次再次使用的时候,它说:“无法打开一个关闭的流”
我想是不是StreamWriter是不是有一个能打开流的方法。我现在不是很清楚,向大家请教

解决方案 »

  1.   

    无法打开一个关闭的流下次使用的时候只有再sw = new StreamWriter(filepath); 
      

  2.   

    在想写入的时候用sw的Flush方法,就可以不用close
      

  3.   


    如果不想关闭,那就也不要new,再次再使用的时候,只要得到上次打开的那个流对象就可以了。
      

  4.   

    1.我的StreamWriter是全局的,如果不是全局那样的话,很多地方都调用不到;
    2.我的主程序中有2个子线程,我听几位高手说可以重新New一个StreamWriter,我就尝试了一下,那么它现在是编译都不能通过了,说StreamWriter不能定义在线程的函数中,这样它会变成另外的意思;
    3.如果说让我得到上次打开流的对象,那么,我每次用的StreamWriter都不是上次的就应该不会出错。
    程序比较复杂,代码不方便发。就简单写点
    //全局的SW
    StreamWriter sw = new StreamWriter(filepath);
    btnClick(Sender object,Event args)
    {
        Thread _trd = new Thread(new ThreadStart(fun));
        _trd.IsBackgourd;
        _trd.Start();
        Timer.Start();
        ....
        sw.WriteLine("ErrorLog...");
        //sw.Close();这里一旦关闭下面就用不了了     .....
        Thread _trd1 = new Thread(new ThreadStart(fun1));
        _trd1.IsBackgound;
        _trd1.Start();
        ....
        sw.WriteLine("ErrorLogOther.....");
        //sw.Close();不能关闭
    }
    void fun()
    {
        ....
        sw.WriteLine("Log1....");
        //sw.Close();这里是第二个使用StreamWriter,也不能关闭
    }
    void fun1()
    {
        ....
        sw.WriteLine("Log2....");
        //sw.Close();不能关,下面还有
    }
    //这就是那个计时器空间Timer的事件
    TimerActvie(Sender object,Event args)
    {
        if(_trd.IsAlive)
        { 
            .....
        }
        Timer.Stop();
        //_trd1不判断,这里应该是主线程UI线程吧。
         sw.WriteLine("Log3....");
        sw.Close();
        //这个时候关闭流了,因为下面不再使用流,但是当我重新使用这个流时(这个应用程序没有关闭情况下,流还是关闭的)那么,这些sw一个都不能用了。
    }
      

  5.   

    代码的逻辑就是这样,所以,我想那个StreamWriter一定有一个开启写入流的方法,不然哪来的Close呢?有Close怎么没有Open呢?
      

  6.   

    close了,就没有Open你既然要重用,干嘛要关闭呢?
    如果你怕不关闭,内容不会写到磁盘
    你调用Flush就可以了,它就会写到磁盘了。
      

  7.   

    StreamWrite有两个参数的,如果是重写,就这样打开ss=new StreamWrite(filepath,true);
      

  8.   

    你可以用这种方法:
    using(StreamWriter sw = new StreamWriter(filepath))
    {
       sw.WriterLine("ErrorLog.....");
    }
    然后就不用关闭流了。