gpt4 book ai didi

c# - 查找并替换文件中的数据(不加载整个文件)?

转载 作者:行者123 更新时间:2023-11-30 20:47:09 26 4
gpt4 key购买 nike

我想替换文件中的一些数据,但我不知道这个 200MB 文件的确切位置。是否可以在不将 200mb+ 文件加载到内存中的情况下找到(并用其他东西替换它们)这些值?

最佳答案

搜索文件没有问题。您需要的是使用可通过 File.Open 获得的 FileStream。方法。您可以通读文件直到需要替换的字节数。当您需要插入一些东西时就会出现问题。 FileStream 允许您从特定字节开始覆盖部分或全部文件内容,并将新内容附加到其末尾,但它不允许您在文件中间插入数据。为了克服这个问题,您将需要一个临时文件。如果您同意,您可以执行以下操作:

  1. 在原始文件上打开 FileStream。
  2. 创建一个临时文件来保存草稿版本。
  3. 搜索原始文件并将所有“好”数据复制到临时文件中,直到要进行修改为止。
  4. 将修改后的数据和新数据插入临时文件。
  5. 使用原始文件中剩余的“好”内容完成临时文件。
  6. 用临时文件替换原始文件。
  7. 删除临时文件。

您可以使用 Path.GetTempFileName使用临时文件的便捷方法。

附言如果你修改一个 exe,那么你可能会替换文本常量,你既不需要插入新字节也不需要删除任何字节。在这种情况下,您不需要为临时文件操心,FileStream 就是您所需要的。

附言使用 FileStream,您可以决定从文件中读取和写回的缓冲区的大小。请记住,此大小是内存消耗、I/O 性能和代码复杂性之间的权衡。做出明智的选择。我会第一次按字节制作它,并尝试优化增加缓冲区以在它工作时说 64k。您可以依靠 FileStream 来缓冲数据;每次您向它请求另一个字节时,它都不会执行磁盘 I/O。如果您自己进行缓冲,请尽量不要将 Large Object Heap 碎片化。 . .NET 4.5 的阈值为 85000 字节。

关于c# - 查找并替换文件中的数据(不加载整个文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26107585/

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