【发布时间】:2016-08-23 01:17:22
【问题描述】:
如果我有这个:
StreamWriter cout = new StreamWriter("test.txt");
cout.WriteLine("XXX");
// here IOException...
StreamReader cin = new StreamReader("test.txt");
string text = cin.ReadLine();
clr 抛出一个IOException,因为我还没有关闭cout。
事实上,如果我这样做:
StreamWriter cout = new StreamWriter("test.txt");
cout.WriteLine("XXX");
cout.Close();
StreamReader cin = new StreamReader("test.txt");
string text = cin.ReadLine();
我也不例外。
但是如果我这样做然后退出应用程序:
StreamReader cin = new StreamReader("test.txt");
string text = cin.ReadLine();
不关闭cin 文件可以从操作系统打开和写入。
但是阅读StreamReader.cs的源代码我没有找到析构方法(即~StreamReader(...))。那么如果垃圾收集器没有调用Dispose 并且没有终结方法,谁来释放该文件?
【问题讨论】:
-
StreamReader 使用 FileShare.Read 创建一个 FileStream 拒绝任何人写入该文件,保证在您阅读时文件不会更改。好的。但这行不通,StreamWriter 要求 FileAccess.Write 并得到它。因此,您将被拒绝访问,因为操作系统不再保证文件不会更改。如果您想放弃该保证,请使用 FileStream 通过 FileShare.ReadWrite 打开文件并将其传递给 StreamReader 构造函数。
标签: c#