首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何截断FileStream以只读取特定的字节?

如何截断FileStream以只读取特定的字节?
EN

Stack Overflow用户
提问于 2014-10-15 07:14:36
回答 1查看 450关注 0票数 1

如何截断FileStream以只读取特定字节。例如:我希望FileStream从位置10传递下100个字节。

我的代码:

代码语言:javascript
复制
    public System.IO.Stream GetFileStream()
    {
        FileStream fs = File.OpenRead(filePath);
        fs.Seek(10, SeekOrigin.Begin); //setting start position

        //How to set the length or the end position of the stream here?

        return fs;
    }

   private void TestFileCopy()
    {
        FileStream fs = GetFileStream();
        FileStream fsCopy = File.OpenWrite(filePathCopy);

        fs.CopyTo(fsCopy);
    }

我可以设置开始位置,但无法找到如何说流停止后,一些字节。

在TestFileCopy方法中,我只想复制流,而不需要任何位置和长度的数据。

在GetFileStream方法中,我希望流将字节从位置A传递到B。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 07:46:36

如果您想要一个真正的Stream实例,它完全表示所需的字节,并且不需要更多的字节,那么您要么需要编写自己的包装器(我在过去的几年中至少实现了一个"SubsetStream“类),…),或者您只需读取所需的字节,将它们复制到MemoryStream中,然后将该MemoryStream作为任何代码实际需要的流实例返回。

当然,如果您实际上不需要Stream实例,那么只需跟踪要读取的总字节,以便知道何时停止读取应该不会太困难。类似于:

代码语言:javascript
复制
int bytesLeft = ...; // initialized to whatever

while (bytesLeft > 0)
{
    int bytesRead = fs.Read(rgb, 0, Math.Min(rgb.Length, bytesLeft));

    bytesLeft -= bytesRead;
}

在您的示例中,您似乎完全控制了读取输入流的代码和写入输出的代码。因此,您应该能够更改它,这样它就不需要一个Stream作为输出的输入,并且您只需编写字节,因为它们将立即从输入中读取。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26376590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档