2009-09-10 78 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

不要打開源文件內循環,不然你會經常閱讀的第一塊。

在循環之前打開它,然後確保將偏移應用於讀取。