gpt4 book ai didi

c# - 替换二进制文件中的字节序列

转载 作者:可可西里 更新时间:2023-11-01 07:43:11 26 4
gpt4 key购买 nike

将二进制文件中的字节序列替换为与其他字节长度相同的最佳方法是什么?二进制文件会非常大,大约 50 MB,不应立即加载到内存中。

更新:我不知道需要替换的字节的位置,我需要先找到它们。

最佳答案

假设您正在尝试替换文件的已知部分

  • 打开一个具有读/写权限的FileStream
  • 找对地方
  • 覆盖现有数据

示例代码来了...

public static void ReplaceData(string filename, int position, byte[] data)
{
using (Stream stream = File.Open(filename, FileMode.Open))
{
stream.Position = position;
stream.Write(data, 0, data.Length);
}
}

如果您正在有效地尝试执行 string.Replace 的二进制版本(例如“始终将字节 { 51, 20, 34} 替换为 { 20, 35, 15 } 那么它更像是更难。作为对你要做的事情的快速描述:

  • 至少分配您感兴趣的数据大小的缓冲区
  • 反复读入缓冲区,扫描数据
  • 如果找到匹配项,请返回到正确的位置(例如 stream.Position -= buffer.Length - indexWithinBuffer; 并覆盖数据

到目前为止听起来很简单......但棘手的一点是数据是否开始接近缓冲区的末尾。您需要记住所有可能的 匹配项以及您到目前为止匹配的程度,以便在读取下一个 缓冲区的值时获得匹配项,您可以检测到

可能有避免这种棘手问题的方法,但我不想尝试随便想出它们:)

编辑:好的,我有个想法可能会有所帮助...

  • 保留一个至少两倍于你需要的缓冲区
  • 反复:
    • 将缓冲区的第二部分复制到第一部分
    • 从文件中填充缓冲区的后半部分
    • 在整个 缓冲区中搜索您要查找的数据

那样的话,在某些时候,如果数据存在,它将完全在缓冲区内。

您需要注意流的位置才能返回正确的位置,但我认为这应该可行。如果您试图找到所有 匹配项会比较棘手,但至少第一个匹配项应该相当简单...

关于c# - 替换二进制文件中的字节序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com