- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我最近遇到错误“ObjectDisposedException:无法访问已关闭的流”
[ObjectDisposedException: Cannot access a closed Stream.]
System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) +10184402
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +114
System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing) +48
使用以下格式的代码时:
using (var stream = new MemoryStream())
{
using (var hashStream = new CryptoStream(stream,
new SHA256Managed(), CryptoStreamMode.Write))
using (var writer = new TextWriter(hashStream))
{
writer.Write("something");
}
// ^-- Exception occurs on hashStream Dispose
// While naively I assumed that TextWriter.Dispose wouldn't touch the
// underlying stream(s).
return stream.ToArray();
}
所以异常是因为TextWriter的Dispose处理了被包裹的Stream(hashStream)。因此,我的问题是:
此约定是否适用于 .NET 中的所有流(使用默认构造函数/参数)?
是否有规范讨论这种资源使用模式?例如,是否可以假设 CryptoStream 会关闭 MemoryStream?我知道答案,还有are other questions specifically about this ,但如果有这样的设计指南,我希望它能得到解决。
此类行为记录在何处?
我找不到 TextWriter(stream)
中讨论的“所有权”或 CryptoStream
构造函数 - 当然我只是看错了位置。 (更新:显然我无法阅读,正如 itsme86 指出的那样, 记录在 TextWriter 构造函数文档中。)
编写此类代码的通用方法是什么?
也就是说,底层流需要被读取(在所有操作结束时,因此仍然打开),而所有嵌套流都应该被关闭/刷新完全 - 一个简单的CryptoStream.Flush例如,这是不够的。
最佳答案
这在the StreamWriter() documentation中特别提到.
The StreamWriter object calls Dispose() on the provided Stream object when StreamWriter.Dispose is called.
关于c# - 谁拥有 .NET 中的包装流(例如 TextWriter)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23162988/
我正在尝试将文本写入我的 txt 文件。第一次写应用程序崩溃并报错后 Cannot write to a closed TextWriter 我的列表包含浏览器打开的链接,我想将它们全部保存在 txt
我正在使用 CsvHelper,它使用 TextWriter 来写入其输出。我不想写入文件,而是想将内容写入控制台。如何获得将写入控制台的 TextWriter? 最佳答案 使用 Console.Ou
我已经编写了一个服务,它有一个单独的线程运行,它从数据库中读取大约 400 条记录并将它们序列化为 xml 文件。它运行良好,没有错误,它报告所有文件都已正确导出,但之后只出现少数 xml 文件,而且
using (TextWriter writer = File.CreateText(path2)) {
好吧,我正在使用 ILSpy 进行巡查,并试图弄清楚这里发生了什么,但我运气不太好。 在使用 Razor 引擎的 ASP.NET MVC4 应用程序中的给定 View 中(但这当然适用于 MVC3,可
我正在尝试实现一个将一些 ActiveDirectory 信息显示到网页上的功能,但是当我出于某种原因尝试显示某些信息(用户的经理)时,它开始向我抛出以下错误,但它没有完成那在过去。任何人都可以解释这
这段代码应该是不言自明的: XDocument xd = .... using (FileStream fs = new FileStream("test.txt", FileMode.Open, F
alt text http://img179.imageshack.us/img179/7827/textwriter.jpg tf.txt 文件有 0 个字节,当在循环中多次调用此方法时,我得到:
我正在编写一个将数据导出到 CSV 文件的类,它的构造函数接受一个 TextWriter。我使用 TextWriter 而不是 StreamWriter 的原因是这样可以使测试更容易:我可以使用相同的
我有两个类,我不能以任何方式更改它们中的任何一个: 第 1 类:采用 TextWriter 作为构造函数参数并将其用作输出流。 类2:提供方法WriteLine(string)。 我需要一个适配器,以
我有 xml,我在另一个 resurse 中通过 API 发送了它。我通过 XDocument 创建它: XDocument xDoc = new XDocument( new XDeclar
我写了一个接受 TextWriter 的方法作为参数(通常是 Console.Out,但不一定)。 当我调用此方法时,一些进度信息将写入 TextWriter。 但是,由于此方法可以运行很长时间,因此
如何使用 TextWriter 对象清除文本文件的所有数据? mt文件名为:user_name.txt 谢谢。 最佳答案 FileMode.Truncate 将从文件中删除所有文本,然后打开文件进行写
我正在使用 textwriter 将数据写入文本文件,但如果该行超过 1024 个字符,则会插入一个换行符,这对我来说是个问题。关于如何解决这个问题或增加字符数限制的任何建议? textWriter.
关于防止“已在使用”错误,我想问一下,如果从多个客户端多次调用,第一个代码片段是否可能存在危险?还是两个代码块都同样安全? 我问是因为第二个代码片段调用了一个 close 方法,该方法也进行了一个听起
对于像增量捕获文本这样的情况,例如,如果您在呈现页面时收到所有 output.write 调用,并且这些调用通过 stringbuilder 附加到文本编写器中。 有没有更有效的方法来做到这一点?最好
我正在编写一个 xml 文件,但缺少特定字段的某些值。我检查当对象出现时包含特定值存在的值,但是在编写 xml 之后该值不存在。 这是我使用的代码,我认为 XmlTextWriter 可能是错误的 x
有没有办法使用 HtmlTextWriter 创建它?我正在尝试创建一种在服务器端动态创建 html 的方法 这是代码的开始我不确定如何创建“data-theme”属性,因为没有为此提供的枚举..
正在苦苦思索如何将 2 个字符串一起加密。 因为我实时添加位和位字符串(通过 str = str + bitString;)并在最后。我生成字符串并将其加密。 现在的问题是我可以像textwriter
我从我的 C# 代码调用一个 API,该代码的方法带有以下 header public void ExternalFactory.SetOut(TextWriter outputStream) 我通
我是一名优秀的程序员,十分优秀!