2013-02-25 94 views
2

我需要的幫助是知道如何將多個1024字節長的字節數組合成一個字節數組來創建文件。如何將多個字節數組合併爲一個來創建文件

我需要這樣做,因爲我必須將多個文件發送到SAP,但文件必須以1024(byte [1024])的字節數組分割,並且在分割文件後,我將這些文件保存爲收集,而我遇到的問題是在SAP中創建文件時這個文件已損壞。我想,當我分割的文件

這個的有我使用分割文件

for (int i = 0; i < attachRaw.Count(); i++) 
     { 
      countLine = attachRaw[i].content.Length/1024; 
      if (attachRaw[i].content.Length % 1024 != 0) 
       countLine++; 
      ZFXX_ATTATTACHMENT_VBA[] attachArray = new ZFXX_ATTATTACHMENT_VBA[countLine];    
      for (int y = 0; y < countLine; y++) 
      { 
       ZFXX_ATTATTACHMENT_VBA attach = new ZFXX_ATTATTACHMENT_VBA(); 
       attach.CONTENT = new byte[i == (countLine - 1) ? (attachRaw[i].content.Length - i * 1024) : 1024]; 
       if (i == (countLine - 1)) 
       { 
        countLine++; 
        countLine--; 
       } 
       if (attachRaw[i].content.Length < 1024) 
       { 
        attach.CONTENT = attachRaw[i].content; 
       } 
       else 
       { 
        attach.CONTENT = FractionByteArray(i * 1024, (i == (countLine - 1) ? attachRaw[i].content.Length : (i * 1024 + 1024)), attachRaw[i].content); 
       } 
       attach.FILE_LINK = attachRaw[i].fileLink; 
       attachmentRaw.Add(attach); 

      } 

     } 


private static byte[] FractionByteArray(int start, int finish, byte[] array) 
    { 
     byte[] returnArray = new byte[finish - start]; 

     for (int i = 0; i < finish - start; i++) 
     { 
      returnArray[i] = array[start + i]; 
     } 
     return returnArray; 
    } 
+0

看一看[陣列在C#合併(http://stackoverflow.com/questions/5395859/is-there-a-function-equivalent-of-php-陣列合併入-C-尖銳)。 – Killrawr 2013-02-25 02:29:23

+0

您是否必須創建一個字節數組,或者只是將多個字節數組寫入(追加)到一個文件中?此外,對於'FractionByteArray'函數,可以使用linq的'Take'和'Skip'方法,或使用'Array.Copy'(忽略for循環)。 – Matthew 2013-02-25 02:49:01

+0

我需要只創建一個字節的數組來創建文件,因爲在讀取文件時創建的原始字節數組被分割成長度爲1024的字節數組,並且我想重新創建原始字節數組檢查是否存在任何數據丟失,因爲在SAP中創建文件時,這個文件會被破壞 – 2013-02-25 02:53:21

回答

7

的方法你可以使用BlockCopy加入所有的陣列放棄任何問題。

喜歡的東西:

private byte[] JoinArrays(IEnumerable<byte[]> arrays) 
    { 
     int offset = 0; 
     byte[] fullArray = new byte[arrays.Sum(a => a.Length)]; 
     foreach (byte[] array in arrays) 
     { 
      Buffer.BlockCopy(array, 0, fullArray, offset, array.Length); 
      offset += array.Length; 
     } 
     return fullArray; 
    } 
相關問題