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

时间:2017-02-08 11:29:33

标签: .net vb.net visual-studio io filestream

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


让我们说有10个文件,每个文件大小为1GB,我将它们合并为一个文件,使其大小为10GB,现在我想从中删除第7个编号的文件,是否可能?我该如何实现呢?


  • 我知道要删除的文件的长度/大小。

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


    我认为有可能......


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

  • 或者通过从要删除的文件的结束位置读取并将其写入要删除的文件的起始位置,直到EOF在同一文件中然后剪切最后不需要的N字节。


    但我想避免它,如果有另一种解决方案,因为它将花费大量时间来读取和写入整个文件并占用大量磁盘空间(在第一个选项中),这可能是用户无法使用的,所以我我正在寻找另一种解决方案。


    如果你们推荐我,我也可以使用任何库或其他方法/解决方案,谢谢。

  • 1 个答案:

    答案 0 :(得分:0)

    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#中。它似乎也是最有效和最有趣的。当然我还没有完成它。