替换文件中的字节系列

时间:2016-09-04 18:34:12

标签: c#

我正在制作一个程序,用于修补upk文件,将“4f 4c 44 6f 6f 72”替换为“4f 4c 52 6f 6f 72”,大约186个文件(“4f 4c 44 6f 6f 72”有多个出现每个文件)。

我已经看过很多关于如何做到这一点的指南,但它们都需要偏移原始字节的位置,这意味着每个文件需要大约28个偏移,这将花费太长时间......

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

如果每个文件足够小以适合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); 
  }