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

本文关键字:字节 读取 何截断 FileStream | 更新日期: 2023-09-27 18:26:43

如何截断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。
感谢

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

如果你想要一个真正的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;
}

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