int bufferlength = 12488;
int pointer = 1;
int offset = 0;
int length = 0;
FileStream fstwrite = new FileStream("D:\\Movie.wmv", FileMode.Create);
while (pointer != 0)
{
byte[] buff = new byte[bufferlength];
FileStream fst = new FileStream("E:\\Movie.wmv", FileMode.Open);
pointer = fst.Read(buff, 0, bufferlength);
fst.Close();
fstwrite.Write(buff, offset , pointer);
offset += pointer;
}
我使用上面的代码拆分文件并将其放在其他驱动器中。我无法为此例程设置正确的偏移和长度,任何人都可以帮我解决这个问题
在某种意义上分裂,我将其拆分为“x”kbs并将其传递到某个地方,在其他位置创建相同的文件
我发现它是最好的,感谢那些给出了有价值的回应的人。
答案 0 :(得分:6)
目前,您总是从文件的开头读取...即使您不是,也只是复制整个文件。
以下是一些实际将单个文件拆分为多个文件的代码:
public static void SplitFile(string inputFile,
string outputPrefix,
int chunkSize)
{
byte[] buffer = new byte[chunkSize];
using (Stream input = File.OpenRead(inputFile))
{
int index = 0;
while (input.Position < input.Length)
{
using (Stream output = File.Create(outputPrefix + index))
{
int chunkBytesRead = 0;
while (chunkBytesRead < chunkSize)
{
int bytesRead = input.Read(buffer,
chunkBytesRead,
chunkSize - chunkBytesRead);
// End of input
if (bytesRead == 0)
{
break;
}
chunkBytesRead += bytesRead;
}
output.Write(buffer, 0, chunkBytesRead);
}
index++;
}
}
}
答案 1 :(得分:2)
您的读取缓冲区长度的字节。你不应该像这样设置偏移吗?
offset += bufferlength;
答案 2 :(得分:1)
不要在循环中打开源文件,否则你将始终读取第一个块。
在循环之前打开它,然后确保将偏移量应用于读取。