从大文件中的某个位置删除 N 个字节长度

Delete N length of bytes from a position in a large file

我读取了几个文件并将它们合并为一个文件,现在我想从中删除一个特定的文件。


假设有 10 个文件,每个文件大小为 1GB,我将它们合并为一个文件,使其大小为 10GB,现在我想从中删除第 7 个编号的文件,可以吗?我如何实现它?


  • 我知道length/size个要删除的文件。

  • 我知道那个大文件中要删除的文件的开始和结束位置。


    我认为这是可能的...


  • 读写前6个和后3个文件并跳过第7个文件并将其写入另一个文件。

  • 或者从待删文件的结束位置读取,写入到待删文件的起始位置,直到同一个文件中的EOF,然后把最后不需要的N个字节截掉。


    但如果有另一种解决方案,我想避免它,因为读取和写入整个文件会花费很多时间并占用大量磁盘 space(在第一个选项中),这可能不适用于用户,所以我正在寻找是否有其他解决方案。


    如果你们推荐我,我也可以使用任何库或其他 method/solution,谢谢。

    1. 你可以使用批处理Copy命令复制文件,这似乎是最简单的copy file1.txt + file2.txt + ... + file10.txt newfile.txt这里我们跳过第7个文件,即file7.txt。这与您的第一种方法相同。它应该是复制命令直接与内核和内存设备交互的有效方式。使用可能也喜欢参考 Robocopy。您可以通过从 .Net 构建命令并使用 shell execute.
    2. W.r.t。正如您所建议的,您的第二种方法最好从文件末尾开始。您可以使用 BinaryWriter 复制并使用 Seek 方法覆盖。 SeekOrigin.Current 将帮助您覆盖块。
    3. 低级编程,即您可以直接使用文件簇和移动文件部分。为此,您可能需要尝试使用小文件,然后将其用于最终合并的大文件。参考link。它在 C# 中。这似乎也是最有效和最有趣的。 Of-course我还没做。