【问题标题】:C# streamreader read data multiple timesC# streamreader 多次读取数据
【发布时间】:2019-05-13 18:44:35
【问题描述】:

我有这个代码:

  using (StreamReader csvreader = new StreamReader(fuFiles.FileContent))
            {
                while (!csvreader.EndOfStream)
                {
                  //reading data
                }
            }

我在两个不同的功能中使用它。 在第一个函数中,EndOfStream 值为 false,可以正确读取数据。 在第二个函数中,同样的代码表明 EndOfStream 为真,我无法读取数据。我正在独立创建流式阅读器对象。

编辑

我再添加一行解释,当我评论第一种方法时,我可以读取第二种方法中的数据。

我做错了什么吗?

【问题讨论】:

  • 第二种方法中文件是否存在或有内容?
  • fuFilesfuFiles.FileContent的类型是什么?
  • 是的,第一种方法只检查一些特殊字符,如果它们存在,则在实际读取和保存数据之前返回 false。当我注释掉第一种方法时,我可以在第二种方法中获取数据。
  • fuFiles.FileContent是什么东西?
  • @HenkHolterman csv 文件

标签: c# .net streamreader


【解决方案1】:

StreamReader 只有两个构造函数接受一个参数。由于“FileContent”可能不是字符串,它必须是某种 Stream。第一次从中读取它被留在最后。因此,您必须将其重置为开头(如果允许),在阅读之前制作副本,或者创建一个新副本。

【讨论】:

    【解决方案2】:

    根据您提供的代码中的变量名称,您似乎正在将文件的内容传递给StreamReader 构造函数。但是,constructor 会读取要读取的文件的路径,而不是文件的内容。

    如果您想这样做,您可以使用StringReader 类来使用流来读取字符串。

    【讨论】:

    • 首先感谢您的回复。当我注释掉检查特殊字符的第一种方法时,我能够读取数据。
    • @Laziale 基于问题上的 cmets,FileContent 是一个流。流通常只读取一次。所以第二次调用该函数时,流已经结束了。这意味着@Mike 的回答是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2013-04-20
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    相关资源
    最近更新 更多