2009-09-10 74 views
0
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; 
} 

我用上面的代码用于分割文件,并将其放置在其他drive.Im无法设置正确的偏移和长度为这个例程谁能帮助我解决这个问题在拆分文件

分裂的意义上,我分裂它在“x”kbs并将它传递到某处使其他位置相同的文件

我发现它最后,谢谢evry谁给了他们的价值回应。

+0

你没有拆分文件。你不是吗? – adatapost 2009-09-10 07:19:05

+0

没有即时消息不,我只是想把它切成“x”没有kbs,并将其传递给 一个remotelocation并在那里重新生成文件。就像ftp中的文件传输一样(即在小块数据中) – karthik 2009-09-10 07:35:54

回答

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

你已经output.Write()后错过了index ++,所以output.Write不会写入同一个文件(index = 0)。 – Marius 2009-10-21 09:28:06

+0

修复,谢谢:) – 2009-10-21 09:55:29

2

您的读取缓冲区的字节数。你不应该像这样设置偏移吗?

offset += bufferlength; 
1

不要打开源文件内循环,不然你会经常阅读的第一块。

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