gpt4 book ai didi

c# - 当我进行流组合时,我应该关闭哪个流?

转载 作者:太空宇宙 更新时间:2023-11-03 20:34:20 26 4
gpt4 key购买 nike

如果我有以下代码:

FileStream fs = new FileStream(...);
TextWriter tw = new StreamWriter(fs);

我应该只调用 tw.Close() 还是 fs.Close()?我在整个应用程序中持续使用 TextWriter,所以我不能只将它包装在 Using(...) block 中,因为我需要能够在多个点使用它。

否则,我会这样写:

using (FileStream fs = new FileStream(...))
{
using (TextWriter tw = new StreamWriter(fs))
{
// do stuff
}
}

并一起避免这个问题。但是,我真的不知道在这种情况下该怎么办。 我是关闭 tw、fs 还是两者都关闭?

此外,更一般地说:如果我将多个流组合在一起,例如 C(B(A)),我是否可以在 C 上调用 Close/Dispose 而不必担心必须在 B 和 A 上调用它?

最佳答案

你只需要关闭StreamWriter即可。

来自StreamWriter.Close 方法的文档:

Closes the current StreamWriter object and the underlying stream.

在该方法的文档中也值得注意:

This implementation of Close calls the Dispose method passing a true value.

这意味着关闭和释放 StreamWriter 是等效的。您不必在关闭对象后处置该对象,也不必在处置它之前将其关闭。 FileStream.Close 方法执行相同的操作,因此关闭或处置 StreamWriter 也会处置该流。

如果您无法为某个类找到此类信息,您始终可以处置作者和流以确保安全。处置一个已经被处置的对象不会造成任何问题,并且该方法什么都不做。只需确保以正确的顺序关闭它们,即在流之前关闭编写器。

关于c# - 当我进行流组合时,我应该关闭哪个流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5767568/

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