StreamReader ReadLine 正在修改/不释放 Stream
本文关键字:释放 Stream 修改 ReadLine StreamReader | 更新日期: 2023-09-27 18:31:43
我正在使用FileHelpers来解析上传到 ASP.NET 应用程序的CSV文件。
将上传两个不同的 CSV 文件结构(即不同数量的列),因此在我使用要解析的结构模型创建 FileHelpers 引擎之前,我像这样阅读文件的第一行:
string line = "";
using (StreamReader reader = new StreamReader(file.InputStream))
{
line = reader.ReadLine();
}
int fieldCount = line.Count(l => l == ',');
这有效,并给了我列计数,但它破坏了我想对file.InputStream
做的任何其他事情:
var engine = new FileHelperEngine<CSVModel>();
CSVModel[] records;
records = (CSVModel[])engine.ReadStream(new StreamReader(file.InputStream),
Int32.MaxValue);
// etc etc
为什么会这样?我试图拿走using
,只是手动关闭()流阅读器,但它没有帮助。
您遇到的问题是,内置的 Stream 类在释放或关闭后会释放基础流。
尽管它有悖常理,但如果您仍在使用它,则需要不关闭流,或者在访问之前重新打开它,或者如果您想在多个地方使用它,则需要将其复制到 MemorStream 中。
这个问题有一些解释。
编辑:(在吉姆的评论之后)
或者,可以使用构造函数中的参数通知 StreamReader 不要关闭基础流。(MSDN 文档)
您应该在
第一次读取后重置流的位置:
file.InputStream.Position = 0;