如何截断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.
感谢
答案 0 :(得分:2)
如果你想要一个实际的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作为输出的输入,并且您只需在输入时立即读取字节。