各ファイルは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);
}
が固定され、知られてオフセットされていますか? 「最悪の効率」アルゴリズムは、各ファイルを直線的に通過し、シーケンスを見つけて置き換えることである。これが1回限りの操作である場合、スピードは本当に重要ですか? –
私はこれらのオフセットを理解することができましたが、それはそれらの約5000を探す必要があり、速度が重要ではないように1回の操作であることを意味するでしょう – user265889