【发布时间】:2012-02-21 17:52:46
【问题描述】:
我有一个长度为 1000 字节的 BinaryReader/BinaryWriter,每条记录为 50 字节。如何消除位置 350 到 550 的记录,最后将剩余的 800 字节保留在我的文件中?
【问题讨论】:
-
最简单的方法可能是读取并保存前 7 条记录,再读取 4 条您丢弃的记录,最后读取并保存其余记录...?
标签: c# binaryfiles
我有一个长度为 1000 字节的 BinaryReader/BinaryWriter,每条记录为 50 字节。如何消除位置 350 到 550 的记录,最后将剩余的 800 字节保留在我的文件中?
【问题讨论】:
标签: c# binaryfiles
最简单的方法是遍历记录,从一个文件读取并写入一个新文件,然后删除不需要的记录。
理论上,您可以在同一个文件中查找,用新数据覆盖“旧”数据,但我个人会尽可能采用简单的方法。这也意味着,如果任何事情中途失败,您仍然会得到原始文件和一个可以删除的“坏”文件,而不是一个可能包含两次记录的文件。
【讨论】:
您必须从位置 550 读取数据到文件末尾,并将其写入位置 350。
如果您使用 FileStream,您可以执行该操作。使用 BinaryReader 和 BinaryWriter 您必须读取文件中的所有数据并写回您想要保留的数据。对于这样一个小文件,您可以将所有数据保存在内存中,但对于较大的文件,您将写入一个临时文件,并在完成后让该文件替换原始文件。
写入临时文件也是一个好主意,可以最大程度地降低丢失数据的风险。如果在操作中的任何时候出现问题,您至少会在磁盘上留下一个完整的文件。
【讨论】: