分割文件时出现问题

时间:2009-09-10 07:14:13

标签: c#

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并将其传递到某个地方,在其他位置创建相同的文件

我发现它是最好的,感谢那些给出了有价值的回应的人。

3 个答案:

答案 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)

不要在循环中打开源文件,否则你将始终读取第一个块。

在循环之前打开它,然后确保将偏移量应用于读取。