如何截断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。
感谢
如果你想要一个真正的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作为输出的输入,并且您只需在从输入中立即读取字节时写入字节。