我有一个像这样定义的字节数组
byte[] fileContents = File.ReadAllBytes(zfoFileName);
如何获取fileContents字节数组的前1/2?
换句话说,如果数组的上限是10,我希望新的字节数组具有fileContents的前5个值。
提前致谢
答案 0 :(得分:7)
byte[] half = new byte[fileContents.Length / 2];
Array.Copy(fileContents, half, half.Length);
答案 1 :(得分:6)
Array.Resize(ref fileContents, fileContents.Length / 2);
最好只在第一时间阅读上半部分。
答案 2 :(得分:5)
var firstHalf = fileContents.Take(fileContents.Length / 2).ToArray();
答案 3 :(得分:5)
为什么不从文件中顺序读取字节?你只能读一半。你做了不必要的操作。
答案 4 :(得分:3)
您可以使用LINQ或Array类轻松完成此操作:
var half = fileContents.Take(fileContents.Length / 2);
// ---
var half = new byte[fileContents.Length / 2];
Array.Copy(fileContents, half, fileContents.Length / 2)
但是您应该从FileStream手动读取数据,因为使用上面的代码可以读取文件中的所有数据,即使您只需要一半的数据。
using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
using (var reader = new BinaryReader(stream))
{
var half = reader.ReadBytes(stream.Length / 2);
}
最诚挚的问候,
Oliver Hanappi
答案 5 :(得分:2)
这是将半个文件读入单个byte[]
的更正确方法:
byte[] data;
using (FileStream fs = File.OpenRead(zfoFileName)) {
int len = (int)fs.Length / 2, bytesRead, offset = 0;
data = new byte[len];
while(len > 0 && (bytesRead = fs.Read(data, offset, len)) > 0) {
len -= bytesRead;
offset += bytesRead;
}
if (len > 0) throw new EndOfStreamException();
}
// now look at data
简而言之,它只是在尽可能少的操作中读取一半数据,但是考虑到Stream.Read
无法保证每次读取您要求的所有数据这一事实。
答案 6 :(得分:0)
你可以做到
byte[] halfFileContents = new byte[Math.Floor(filecontents.Length / 2)];
Arra.Copy(fileContents, halfFileContents, halfFileContents.Lenght);
如果您首先不需要fileContents,则可以使用FileStream和BinaryReader,并只读取该文件的一半。