优化文件拆分

  • 本文关键字:拆分 文件 优化 c#
  • 更新时间 :
  • 英文 :


Hi我目前使用以下代码将文件拆分为多个2mb的小部分。

const int BUFFER_SIZE = 20 * 1024;
byte[] buffer = new byte[BUFFER_SIZE];
using (Stream input = File.OpenRead(inputFile)) {
    int index = 0;
    while (input.Position < input.Length) {
        using (Stream output = File.Create(path)) {
            int remaining = chunkSize, bytesRead;
            while (remaining > 0 && (bytesRead = input.Read(buffer, 0,
                        Math.Min(remaining, BUFFER_SIZE))) > 0) {
                output.Write(buffer, 0, bytesRead);
                remaining -= bytesRead;
            }
        }
    }
    index++;
}

这工作非常完美,将把一个10mb的文件拆分为5 x 2mb的文件0.part,2.part等等。。。

我想知道如果知道chunkSize总是保持在2mb,我将如何再次生成第3部分。我可以通过包装if、else和评估索引来实现这一点,但对于1GB的文件,这个过程可能需要一段时间才能循环完成。我想更多地了解这个函数,以及如何才能获得我需要的文件部分?

input.Position属性是可设置的。如果您知道需要第3部分,请将Position设置为2*chunkSize以跳过前两个块,并执行最内部的while循环一次以从该位置复制到输出:

int desiredChunkNumber = 3;
using (Stream input = File.OpenRead(inputFile)) {
    input.Position = (desiredChunkNumber - 1) * chunkSize;
    using (Stream output = File.Create(path)) {
        int remaining = chunkSize, bytesRead;
        while (remaining > 0 && (bytesRead = input.Read(buffer, 0,
                    Math.Min(remaining, BUFFER_SIZE))) > 0) {
            output.Write(buffer, 0, bytesRead);
            remaining -= bytesRead;
        }
    }
}

最新更新