- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
---简短版本:当我每次进入 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/
在MSE例子中,播放前调用endOfstream mediaSource.endOfStream(); video.play() https://developer.mozilla.org/en-US
我正在尝试使用代码(粘贴在下面)读取文本文件,但文件的最后一行没有被读取。我的逻辑正确吗? using (StreamReader reader = new StreamReader(
我编写了一个转换过滤器,它不会将前四帧的样本传递给渲染器,因为我在队列中提取和存储数据。因为对转换方法的调用等于帧数,所以我的最后 3 帧数据没有被调用并且数据丢失。如何解决 EndOfStream
BinaryReader 没有 EndOfStream 属性。使用以下代码检查是否已到达流结尾是否安全? reader.BaseStream.Length>reader.BaseStream.Posi
我正在我的 C# 应用程序中启动一个进程,该进程运行一个控制台应用程序。我已经重定向了标准输入和输出,并且能够通过 StandardOutput.ReadLine() 读取几行。我确信我已正确配置 P
所以我正在做一个项目,我正在读取配置文件。配置文件只是一个字符串列表,如“D 1 1”、“C 2 2”等。现在我还没有用 C# 进行过读/写,所以我在网上查找它希望找到某种形式的演绎C/C++ .eo
我正在编写一个大型应用程序,其中涉及来自进程或文件流的一些流。下面有两个示例,展示了检测流结束的不同方法。我很好奇有什么区别以及哪一个最好使用?效率或性能有什么区别吗?另外,在 .NET 引用指南中,
我正在使用一个使用 web 服务来推送一些事件的客户端 - web 服务的设计是这样的,即在客户端发布订阅命令时,它会发回一些感兴趣的事件并继续这样做只要客户端保持连接。 当 POST 命令时,服务会
正如标题所说,我发现了一个问题。先说小故事:我们的 file.txt 看起来像这样: aaaabb ccccddd eeeefffffff 有很多方法可以逐行阅读这段文字,其中一种是: StreamR
首先我明白我可以用不同的方式解决这个问题。我想这个问题的存在只是因为以不正确的方式使用了不同的方法。但我想知道在我的示例中到底发生了什么。 我正在使用 StreamReader 读取文件。为了从中获取
---简短版本:当我每次进入 while (!checkReader.EndOfStream) 时,它都会显示 EndOfStream = true。 ---更多细节:用户将使用 Ajax Async
我想在解析 XML 文档之前检测它的编码。所以我在堆栈上找到了overflow这个脚本。 public static XElement GetXMLFromStream(Stream uploadSt
我有一个 webrequest 可以创建与服务器的持久(保持事件)连接,例如: webRequest.ContentType = "application/x-www-form-urlencoded"
我写了这个小程序,它从 Random.txt 中每隔 5 个字符读取一次在 random.txt 中,我有一行文本:ABCDEFGHIJKLMNOPRST。我得到了预期的结果: A的位置为0 F的位置
我写了一个简单的测试项目,打开9123端口一段时间后退出: import java.io.IOException; import java.net.InetSocketAddress; import
我是一名优秀的程序员,十分优秀!