C# 中截断文件前 4 个字节的最有效方法是什么?
Whats the most efficient way in C# to cut off the first 4 bytes of a file?
我有一个压缩的 (LZMA) .txt 文件,需要解压它,但我必须排除前 4 个字节,因为它们不是文件内容的一部分。
我这样加载我的文件:
byte[] curFile = File.ReadAllBytes(files[i]);
性能至关重要,因为我必须遍历超过 14k+ 个文件,平均文件大小约为 4KB。
如果您只是使用字节数组,您可以在数组中使用 ConstrainedCopy 方法 class。
Array.ConstrainedCopy(unclippedArray, 4, clippedArray, 0, unclippedArray.Length - 4);
如果您不打算只处理原始字节,请使用内存流和二进制文件 reader 或其他人建议的文件流。
for (int i = 0; i < filePath.Length; i++)
{
var positionToSkipTo = 4;
using (var fileStream = File.OpenRead(filePath))
{
fileStream.Seek(positionToSkipTo, SeekOrigin.Begin);
var curFile = new byte[fileStream.Length - positionToSkipTo];
fileStream.Read(curFile, 0, curFile.Length);
//Do your thing
}
}
一切都是不言自明的。 MSDN FileStream class documentation.
中列出了重要功能
我有一个压缩的 (LZMA) .txt 文件,需要解压它,但我必须排除前 4 个字节,因为它们不是文件内容的一部分。
我这样加载我的文件:
byte[] curFile = File.ReadAllBytes(files[i]);
性能至关重要,因为我必须遍历超过 14k+ 个文件,平均文件大小约为 4KB。
如果您只是使用字节数组,您可以在数组中使用 ConstrainedCopy 方法 class。
Array.ConstrainedCopy(unclippedArray, 4, clippedArray, 0, unclippedArray.Length - 4);
如果您不打算只处理原始字节,请使用内存流和二进制文件 reader 或其他人建议的文件流。
for (int i = 0; i < filePath.Length; i++)
{
var positionToSkipTo = 4;
using (var fileStream = File.OpenRead(filePath))
{
fileStream.Seek(positionToSkipTo, SeekOrigin.Begin);
var curFile = new byte[fileStream.Length - positionToSkipTo];
fileStream.Read(curFile, 0, curFile.Length);
//Do your thing
}
}
一切都是不言自明的。 MSDN FileStream class documentation.
中列出了重要功能