【发布时间】:2016-01-16 18:09:52
【问题描述】:
文件的大多数高级表示形式都是流。 C 的 fopen、ActiveX 的 Scripting.FileSystemObject 和 ADODB.Stream - 事实上,任何基于 C 构建的东西都极有可能使用流表示来编辑文件。
但是,当修改大型 (~4MiB) 固定结构二进制文件时,将整个文件读入内存并将几乎完全相同的内容写回磁盘似乎很浪费 - 这几乎肯定会带来性能损失。查看大多数未压缩的文件系统,在我看来,没有理由在不接触周围数据的情况下无法读取和写入文件的一部分。最多必须重写该块,但这通常是 4KiB 的数量级;比大文件的整个文件少得多。
例子:
00 01 02 03
04 05 06 07
08 09 0A 0B
0C 0D 0E 0F
可能变成:
00 01 02 03
04 F0 F1 F2
F3 F4 F5 0B
0C 0D 0E 0F
使用现有 ActiveX 对象的解决方案是理想的,但无需重写整个文件的任何方式都可以。
【问题讨论】:
-
您能否更新您的问题以包含尝试的代码 sn-ps?此外,hta / javascript 是绝对必须的。如果您对这项技术很灵活,您是否考虑过 PowerShell? stackoverflow.com/questions/20935356/…
-
@StephenQuan 我的意思是一种非基于流的文件管理方法。我不知道如何在 C 中做到这一点,并且被告知在 Python 中这是不可能的......这可能是不可能的!您提供的链接只是打开一个文件,然后保存修改后的副本,再次写入所有未更改的字节...出于速度原因,我想要一种仅触摸修改后的字节的方法。
-
顺便说一句,我不是反对你的问题的人,我想知道为什么人们也认为这是一个坏问题,因为我认为这是一个合理的问题。我认为 PowerShell 仍然是一种有效的方法。您仍然可以使用 HTA 作为您的前端 UI,并按照以下方式执行操作:stackoverflow.com/questions/20935356/…
-
@StephenQuan 是的,但是......好的。想象一下,我正在处理一个 500GB 的文件,我需要更改 273 个字节,所有这些都分散在文件周围。仅对于这 273 个字节,再次读取和写入整个文件需要很长时间。所以我正在寻找一种以“非常低级别”的方式编辑字节的方法,而不是从流 A 读取并写入流 B(高级内容)!
-
就我而言,如果我遇到这个问题,我会考虑构建自己的 ActiveX 库。话虽如此,您可能可以下载一些东西,但是,我怀疑您正在寻求零安装足迹来实现您的目标?
标签: windows file activex activexobject