我这里只有一个函数,调用者想要字节数,然后返回字节,但如果文件中没有足够的字节,它应该返回一个更小的数组。有没有更好的方法来做到这一点?我的意思是没有获得2个数组并使用BlockCopy
?
byte[] GetPartialPackage(string filePath, long offset, int count)
{
using (var reader = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
reader.Seek(offset, SeekOrigin.Begin);
byte[] tempData = new byte[count];
int num = reader.Read(tempData, 0, count);
byte[] tempdata = new byte[num];
Buffer.BlockCopy(tempData, 0, tempdata, 0, num);
return tempdata;
}
}
答案 0 :(得分:3)
只需根据流的长度更新计数,以便在必要时缩短它。
byte[] GetPartialPackage(string filePath, long offset, int count)
{
using (var reader = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
reader.Seek(offset, SeekOrigin.Begin);
int avaliableCount = Math.Min(count, (int)(reader.Length - offset));
byte[] tempData = new byte[avaliableCount];
int num = reader.Read(tempData, 0, avaliableCount);
return tempData;
}
}
答案 1 :(得分:0)
这只会分配一个字节数组:
byte[] GetPartialPackage(string filePath, long offset, int count)
{
using (var reader = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
reader.Seek(offset, SeekOrigin.Begin);
int actualCount = Math.Min(count, reader.Length - offset);
byte[] tempData = new byte[actualCount];
reader.Read(tempData, 0, actualCount);
return tempdata;
}
}
但请注意,根据http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx的MS文档,即使尚未到达流末尾,FileStream实际上也可能读取的字节数少于请求的字节数。