gpt4 book ai didi

c# - 我可以在第一次读取文件后让 StreamReader.EndOfStream 返回 false 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:52 28 4
gpt4 key购买 nike

---简短版本:当我每次进入 while (!checkReader.EndOfStream) 时,它都会显示 EndOfStream = true

---更多细节:用户将使用 Ajax AsyncFileUpload 控件上传文件。我获取该文件,确保它是我们使用的非常特定的 csv 格式,并将其输出到 GridView 中。这一切在第一次通过时就很好用:我得到文件,解析它,它显示得很好。
但是,如果我在用户 session 期间再次调用相同的代码,StreamReader.EndOfStream = true

例如,用户上传一个文件,我将它吐出到 GridView 中。哎呀!用户意识到有标题...我有一个带有事件处理程序的复选框,该事件处理程序将调用下面的方法重新读取原始文件(它存储在 session 变量中)。用户选中复选框,事件触发,方法被调用,但我的 EndOfStream 现在为真。

我认为 using () 会更改该标志,我尝试在下面的 while 循环之后添加 checkReader.DiscardBufferedData,但它们似乎都没有影响。

我做错了什么?

 private void BuildDataFileGridView(bool hasHeaders)
{
//read import file from the session variable
Stream theStream = SessionImportFileUpload.PostedFile.InputStream;
theStream.Position = 0;

StringBuilder sb = new StringBuilder();

using (StreamReader checkReader = new StreamReader(theStream))
{
while (!checkReader.EndOfStream)
{
string line = checkReader.ReadLine();
while (line.EndsWith(","))
{
line = line.Substring(0, line.Length - 1);
}
sb.AppendLine(line);
}
}

using (TextReader reader = new StringReader(sb.ToString()))
{
//read the file in and shove it out for the client
using (CsvReader csv = new CsvReader(reader, hasHeaders, CsvReader.DefaultDelimiter))
{
sDataInputTable = new DataTable();

try
{
//Load the DataTable with csv values
sDataInputTable.Load(csv);
}
catch
{
DisplayPopupMessage("ERROR: A problem was encountered");
}

//Copy only the first 10 rows into a temp table for display.
DataTable displayDataTable = sDataInputTable.Rows.Cast<System.Data.DataRow>().Take(10).CopyToDataTable();

MyDataGridView.DataSource = displayDataTable;
MyDataGridView.DataBind();
}
}
}

编辑:SessionImportFileUpload 是实际的 Ajax AsyncFileUpload 控件,被存储为 session 变量(这已经是这种情况,因为以前的人在使用它的情况下编写了其他内容)。

最佳答案

您正在将发布的文件流存储在 session 中。这是不正确的,因为流不是数据,而是读取数据的机制。该文件仅在单个 POST 请求期间上传一次,以后您将无法再次从同一流中读取。通常您甚至无法倒带流来重新阅读它。

这就是为什么我建议只读取一次发布的文件流并将整个内容放入 Session - 这样内容就可以重复使用,并且您可以根据需要多次重新处理它。

关于c# - 我可以在第一次读取文件后让 StreamReader.EndOfStream 返回 false 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19525383/

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