优化文件的拆分

时间:2016-04-05 11:55:22

标签: c#

您好我目前使用以下代码将文件拆分为多个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个2mb的文件,分别为0.part,2.part等...

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

1 个答案:

答案 0 :(得分:3)

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;
        }
    }
}