【问题标题】:weird behaviour of seek C#寻找 C# 的奇怪行为
【发布时间】:2009-11-23 06:27:44
【问题描述】:

我对流有一些困难。我正在使用 FileStream 和 BinaryReader,但我遇到了一些奇怪的行为。首先(这是另一个问题,当我使用 StreamReader 时,我得到了奇怪的行为,当我 Peek 时 psoition 改变了,所以我使用 BinaryReader 很好)现在我有一个问题,有时当我做 Seek 时(使用当然底层的基本流 - FileStream)有时它工作正常(到达正确的位置)但有时它只是跳到一个超出文件长度的位置,它不会一直发生,例如我有一个问题到了1233*267的位置,但是过了一天就好了,问题出在别的地方。

FileStream m_fsReader = new FileStream(m_strDataFileName, FileMode.Open,         FileAccess.Read, FileShare.ReadWrite);
BinaryReader m_brReader = new BinaryReader(m_fsReader);

和查找部分:

 m_fsReader.Seek(offset, SeekOrigin.Begin);

谢谢,

【问题讨论】:

  • 您可以通过将 FileShare.ReadWrite 更改为 FileShare.None 来运行您的程序吗?
  • 拼写检查并重新格式化您的问题。
  • 我可以更改 FileShare 。也许这个信息应该有帮助,进程写入文件,但有时我输入数据并将数据添加到文件中。系统何时进行搜索仅在启动进程时进行一次。
  • 上面的代码看起来还不错——你确定问题不在于'offset'的计算吗?
  • 是的,我确定问题不在计算中

标签: c# seek


【解决方案1】:

我注意到每个 Stream 都有自己的位置。当一个 Stream 从另一个流构造时,位置最初是相同的;但如果第二个流寻找,它不会同步其基本流位置。

在读取和查找操作后尝试观察两个流的 Position 属性。您将看到操作和基本流位置值之间的差异。

我通过在子流完成工作后调用自己在基本流上的 Seek 解决了这个问题。

【讨论】:

    【解决方案2】:

    很难说,但我很确定如果一天工作而另一天工作,则文件不可能被更改。

    关于 Seek 方法,它允许您搜索超出流长度的任何位置。

    来自 MSDN:

    您可以搜索到流长度之外的任何位置。当您搜索超出文件长度时,文件大小会增加。

    http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2019-04-10
      • 2019-05-24
      相关资源
      最近更新 更多