C#关于FileStream文件流被关闭的问题

classtest{privatestaticFileStreamfs;//这个文件流作为全局变量privatestaticvoidExample1(){fs=newFi... class test
{
private static FileStream fs; //这个文件流作为全局变量

private static void Example1()
{
fs = new FileStream("文件路径", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
BinaryWriter bw = new BinaryWriter(fs);
try
{
bw.Write("示例文本1");
}
catch{}
finally
{
bw.Close();
bw.Dispose();
}
}

private static void Example2()
{
try
{
bw.Write("示例文本2");
}
catch{}
finally
{
bw.Close();
bw.Dispose();
}
}
}

以上是代码,然后先调用函数Example1(),再调用函数Example2()时,就发生错误了,发现这时的fs文件流已经被关闭了,那么是什么原因呢?而且如果使用BinaryReader来读取fs时,fs不会被关闭,是因为BinaryWriter把文件流关闭的吗?求懂得高手解答~~~谢谢~~~
展开
 我来答
Hope_李
2013-12-26 · TA获得超过141个赞
知道小有建树答主
回答量:329
采纳率:33%
帮助的人:202万
展开全部
finally { bw.Close(); bw.Dispose(); }
这里会吧bw关联的fs也释放掉。
你这里执行的时候都关系然后释放资源了,再次调用肯定要报错。
追问
那么,我想问你几个问题:
1、如果我bw不释放,他会一直占用着内存吗?或者使我的文件一直处于被写入的状态?
2、如果如果问题1是占用的话,那么如何能让bw的内存释放掉,而不释放fs?
谢谢~
czgas888
2013-12-26 · 超过19用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:19.9万
展开全部
你的bw对象作用范围只在Example1中有效,在Example2中当然不会起作用了
更多追问追答
追问
哦,我写问题的时候写错了,忘记在Example2中定义bw了,但是fs被关闭的问题还是存在
追答
你可以用StreamWriter试下
class test{private static StreamReader sr; //读取
private StreadmWriter sw; //写入private static void Example1(){
sw = StreamWriter("文件名", true, System.Text.UnicodeEncoding.GetEncoding("gb2312")) try { sw.WriteLine("示例文本1"); } catch{} finally { }}private static void Example2(){ try { sw.WriteLine("示例文本2"); } catch{} finally { bw.Close(); bw.Dispose(); }}}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式