1
我正在製作一個程序,它將在大約186個文件(「4f 4c 44 6f 6f」)中用「4f 4c 52 6f 6f 72」替換「4f 4c 44 6f 6f 72」 72「在每個文件中有多個出現)。替換文件中的字節序列
我已經看到了很多關於如何做到這一點的指南,但它們都需要偏移原始字節的位置,這意味着我需要每個文件大約28個偏移量,這將會花費太長時間...
這樣做的最好方法是什麼?
我正在製作一個程序,它將在大約186個文件(「4f 4c 44 6f 6f」)中用「4f 4c 52 6f 6f 72」替換「4f 4c 44 6f 6f 72」 72「在每個文件中有多個出現)。替換文件中的字節序列
我已經看到了很多關於如何做到這一點的指南,但它們都需要偏移原始字節的位置,這意味着我需要每個文件大約28個偏移量,這將會花費太長時間...
這樣做的最好方法是什麼?
如果每個文件是足夠適合RAM,你可以嘗試讀取整個文件,對矯正它回寫小:
private static IEnumerable<int> Offsets(byte[] data, byte[] toFind) {
for (int i = 0; i <= data.Length - toFind.Length; ++i) {
bool matched = true;
for (int j = 0; j < toFind.Length; ++j)
if (data[i + j] != toFind[j]) {
matched = false;
break;
}
if (matched)
yield return i;
}
}
private static void ModifyFile(String path) {
byte[] toFind = new byte[] {0x4f, 0x4c, 0x44, 0x6f, 0x6f, 0x72 };
byte[] data = File.ReadAllBytes(path);
foreach(var offset in Offsets(data, toFind))
data[offset + 2] = 0x52; // we want just one byte to update
File.WriteAllBytes(path, data);
}
是偏移固定且已知? 「最差效率」算法將線性遍歷每個文件,找到序列並將其替換。當這可能是一次性操作時,速度真的很重要嗎? –
我可以找出這些偏移量,但這意味着我將不得不尋找約5000個這些,這是一次性的操作,所以速度並不重要 – user265889