我希望找到一个文件中的大部分字节,删除它们然后从旧的字节开始处导入新的大部分字节。
以下是我尝试在C#中重新创建的手动过程的视频,它可能会更好地解释它:https://www.youtube.com/watch?v=_KNx8WTTcVA
我只有C#的基本经验所以我一直在学习,对此的任何帮助都将非常感激!
感谢。
答案 0 :(得分:1)
参考这个问题: C# Replace bytes in Byte[]
使用以下课程:
public static class BytePatternUtilities
{
private static int FindBytes(byte[] src, byte[] find)
{
int index = -1;
int matchIndex = 0;
// handle the complete source array
for (int i = 0; i < src.Length; i++)
{
if (src[i] == find[matchIndex])
{
if (matchIndex == (find.Length - 1))
{
index = i - matchIndex;
break;
}
matchIndex++;
}
else
{
matchIndex = 0;
}
}
return index;
}
public static byte[] ReplaceBytes(byte[] src, byte[] search, byte[] repl)
{
byte[] dst = null;
byte[] temp = null;
int index = FindBytes(src, search);
while (index >= 0)
{
if (temp == null)
temp = src;
else
temp = dst;
dst = new byte[temp.Length - search.Length + repl.Length];
// before found array
Buffer.BlockCopy(temp, 0, dst, 0, index);
// repl copy
Buffer.BlockCopy(repl, 0, dst, index, repl.Length);
// rest of src array
Buffer.BlockCopy(
temp,
index + search.Length,
dst,
index + repl.Length,
temp.Length - (index + search.Length));
index = FindBytes(dst, search);
}
return dst;
}
}
用法:
byte[] allBytes = File.ReadAllBytes(@"your source file path");
byte[] oldbytePattern = new byte[]{49, 50};
byte[] newBytePattern = new byte[]{48, 51, 52};
byte[] resultBytes = BytePatternUtilities.ReplaceBytes(allBytes, oldbytePattern, newBytePattern);
File.WriteAllBytes(@"your destination file path", resultBytes)
问题是当文件太大时,则需要“窗口”功能。不要在内存中加载所有字节,因为它会占用很多空间。