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

2024-03-03

- -简洁版本: 当我到达while (!checkReader.EndOfStream)每次在第一次之后,它都会说EndOfStream = true.

- -更多详情: 用户将使用 Ajax AsyncFileUpload 控件上传文件。我获取该文件,确保它是我们使用的非常特定的 csv 格式,并将其吐出到 GridView 中。这一切第一次都运行良好:我获取文件,解析它,并且它显示得很好。
但是,如果我在用户会话期间的任何时候再次调用相同的代码StreamReader.EndOfStream = true.

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

我以为using ()会改变那个标志,我尝试添加checkReader.DiscardBufferedData就在下面的 while 循环之后,但这两个似乎都没有任何影响。

我究竟做错了什么?

 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 控件,被存储为会话变量(这已经是这种情况,因为以前的人编写了其他使用它的东西)。


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以让 StreamReader.EndOfStream 在第一次读取文件后返回 false 吗? 的相关文章

  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • std::bind 重载解析

    下面的代码工作正常 include
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 如何从 Java 7 调用 Kotlin 挂起协程函数

    我正在尝试从 Java 7 调用 Kotlin 函数 我正在使用协程 并且这个被调用的函数正在挂起 例如 suspend fun suspendingFunction Boolean return async longRunningFunc
  • Scala 元组列表到平面列表

    我有元组对列表 List String String 并想将其展平为字符串列表 List String 一些选项可能是 连接 list map t gt t 1 t 2 一个接一个交错 在您发表评论后 您似乎在要求这个 list flatM
  • 计算一系列值的 RGB 值以创建热图

    我正在尝试用 python 创建热图 为此 我必须为可能值范围内的每个值分配一个 RGB 值 我想将颜色从蓝色 最小值 更改为绿色到红色 最大值 下面的图片示例解释了我对颜色组合的看法 我们的范围是从 1 纯蓝色 到 3 纯红色 2 介于两
  • Angular2的ng-select如何实现分组?

    我正在实现多个选择下拉菜单Angular2项目按照这个link https plnkr co edit JcG8uO9nIfSGMEKdLf0Y p preview 但现在我必须在这个多选下拉列表中显示分组 那么我该如何实现呢 或者有其他插
  • Javafx 橡皮筋调整大小错误

    所以 我的橡皮筋课上有一个错误 但我似乎无法修复它 我基本上做的是 我有一个边框窗格 它是我想要调整大小的节点的外部窗格 我为这个 borderpane 指定一个宽度为 1 像素的边框 查看 css 我还为这个边框面板分配了 4 个矩形 每
  • Angular 2 - 锚链接到当前页面上的元素[重复]

    这个问题在这里已经有答案了 如果问题标题不清楚 我有一个带有某些 链接 部分的网页 因此有人可以单击该链接并转到同一模板上的元素 这并不一定意味着更改 URL 我尝试过的要点 a href Section B a a href p Cont
  • 升级到 macOS Sierra 后无法从终端运行 R

    我最近将 MacBook 更新到了 macOS Sierra 版本 10 12 3 16D32 并且我无法再直接从终端运行 R DN51ssqi kjytay R bash R command not found DN51ssqi kjyt
  • ACM 交互器冻结

    我正在尝试使用 Swing 和 ACM 交互器制作一个非常简单的程序 它直接取自课堂讲义 但在我的计算机上不起作用 当我运行它时 它可以正常运行大约半秒 然后短暂闪烁 重新加载 然后所有按钮和文本字段功能都丢失 这是代码 import ac
  • ECONNREFUSED 用于从本地主机到另一个本地主机的代理请求

    首先 我是角度新手 我正在遵循教程视频 https youtu be 2OHbjep WjQ一步步 我在这个问题上被困了近两周 并花了很多时间在其他类似的论坛上寻找解决方案 我意识到这是一个常见的错误 但在尝试了几十个左右的解决方案但没有成
  • 如何捕获整数(0)?

    假设我们有一个语句可以生成integer 0 e g a lt which 1 3 5 捕捉这个最安全的方法是什么 这是 R 打印零长度向量 整数一 的方式 因此您可以测试a长度为 0 R gt length a 1 0 可能值得重新考虑您
  • python 中的图谱聚类

    我想使用谱聚类在 python 中对图进行聚类 谱聚类是一种更通用的技术 不仅可以应用于图形 还可以应用于图像或任何类型的数据 但是 它被认为是一种特殊的技术graph聚类技术 遗憾的是 我无法在线找到 python 中的谱聚类图的示例 S
  • 使用 CSS 制作进度条动画

    所以 我在这个页面上有几个不同的进度条 http kaye at play goals http kaye at play goals 这是我的 HTML 和 CSS div class meter span style width 100
  • jQuery $(window).load(); 是否执行事件不会在没有 声明的页面上触发? (...在 Chrome 扩展内容脚本中)

    我正在开发一个可以操作网页的 Google Chrome 扩展 但在它部分加载 DOM 或完全加载 带有图像 之后 看来现在很多网站都使用 声明 或者它的一些变体 但许多其他人没有 问题主要是关于 HTML 文档类型 我不确定其他的 是否可
  • 在 VBA 中执行存储过程的两种方法,哪一种更好?

    背景 使用前端 Ms Access 2010 和后端 SQL Server 2008 Management Studio 为了执行存储过程 我一直使用一个相当漫长的过程 如下所示 in VBA Set Conn New ADODB conn
  • 如何使用 NSPredicate 过滤包含其他类的复合对象的 NSMutableSet?

    新手问题 我有 3 个类 其中 3 个是 NSOBject 的子类 收藏类 有 2 个属性 masterSong 作为 NSMutableSet 强 非原子 和listOfPlaylists 作为 NSMutableArray 强 非原子
  • 为什么我无法在 python 中处理键盘中断?

    我正在 Windows 上编写 python 2 6 6 代码 如下所示 try dostuff except KeyboardInterrupt print Interrupted except print Some other exce
  • 无法在 OS X (Snow Leopard) 上配置 node.js 进行 make install

    我克隆了 Node git repo 但 Node 附带的 waf 构建工具似乎不适用于最新版本的 Python configure Traceback most recent call last File Users greim node
  • 使用 Spring 具有不同视图的 JPA EntityGraph

    我有一个 Spring 应用程序 登录后 我调用 getUserByEmail 方法 我只需要用户和角色数据 根据角色 我将显示不同的视图 每个视图都有不同的数据 并且需要不同的用户子实体 似乎我必须使用不同的子实体调用 getUserBy
  • MS Access 2010:将事务管理添加到表单中

    使用事务 BeginTrans CommitTrans Rollback 后 MS Access 2010 环境似乎不稳定 我所说的不稳定是指 MS Access 环境不再允许任何对象修改 它会自动变成一种独占模式 或者在运行进程的任何 S
  • 我可以让 StreamReader.EndOfStream 在第一次读取文件后返回 false 吗?

    简洁版本 当我到达while checkReader EndOfStream 每次在第一次之后 它都会说EndOfStream true 更多详情 用户将使用 Ajax AsyncFileUpload 控件上传文件 我获取该文件 确保它是我