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