繁体   English   中英

如何截断FileStream以仅读取特定字节?

[英]How to truncate a FileStream to read just specific bytes?

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

我的代码:

    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。
谢谢

如果您想要一个实际的Stream实例来准确地表示所需的字节而已,那么您要么需要编写自己的包装器(多年来我至少实现了几次“ SubsetStream”类……这并不难。 ),也可以只读取所需的字节,将其复制到MemoryStream中,然后将该MemoryStream作为Stream实例返回,以获取实际需要的任何代码。

当然,如果您实际上不需要Stream实例,那么只需跟踪要读取的剩余总字节数,这样您就知道何时停止读取应该不会太难。 就像是:

int bytesLeft = ...; // initialized to whatever

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

    bytesLeft -= bytesRead;
}

在您的示例中,您似乎完全控制了读取输入流的代码和写入输出的代码。 因此,您应该能够对其进行更改,以使其不需要流作为输入作为输出,而您只需写入字节即可,因为它们是从输入中立即读取的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM