gpt4 book ai didi

c# - 在 StreamWriter 和 StreamReader 上完成

转载 作者:太空狗 更新时间:2023-10-29 21:26:47 24 4
gpt4 key购买 nike

如果我有这个:

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();

我也不异常(exception)。

但是如果我这样做然后退出应用程序:

StreamReader cin = new StreamReader("test.txt");
string text = cin.ReadLine();

在不关闭cin 的情况下,文件可以从操作系统打开和写入。

但是阅读 StreamReader.cs 的源代码我没有找到析构函数方法(即 ~StreamReader(...))。那么,如果垃圾收集器不调用 Dispose 并且没有终结方法,谁来释放该文件呢?

最佳答案

在内部,StreamReader uses a FileStream :

 Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultFileStreamBufferSize, FileOptions.SequentialScan, Path.GetFileName(path), false, false, checkHost);

FileStream 类,是最终访问文件的类,因此需要保证清理,does have a finalizer ,它关闭了实际的底层流。 StreamReader 上的Dispose 方法只是calls the Close on the underlying FileStream .

关于c# - 在 StreamWriter 和 StreamReader 上完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36911889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com