如何截断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。
谢谢
发布于 2014-10-15 07:46:36
如果您想要一个真正的Stream实例,它完全表示所需的字节,并且不需要更多的字节,那么您要么需要编写自己的包装器(我在过去的几年中至少实现了一个"SubsetStream“类),…),或者您只需读取所需的字节,将它们复制到MemoryStream中,然后将该MemoryStream作为任何代码实际需要的流实例返回。
当然,如果您实际上不需要Stream实例,那么只需跟踪要读取的总字节,以便知道何时停止读取应该不会太困难。类似于:
int bytesLeft = ...; // initialized to whatever
while (bytesLeft > 0)
{
int bytesRead = fs.Read(rgb, 0, Math.Min(rgb.Length, bytesLeft));
bytesLeft -= bytesRead;
}在您的示例中,您似乎完全控制了读取输入流的代码和写入输出的代码。因此,您应该能够更改它,这样它就不需要一个Stream作为输出的输入,并且您只需编写字节,因为它们将立即从输入中读取。
https://stackoverflow.com/questions/26376590
复制相似问题