2012-02-24 84 views
0

可能重複:
Create Excel (.XLS and .XLSX) file from C#如何根據文件分割爆炸一個字節數組?

我具有由字節另一個數組分裂,其最初從2陣列的字節創建字節的陣列。是這樣的:

Byte[] ArrayFirst = File.ReadAllBytes("file1.exe"); 
Byte[] ArraySeconde = File.ReadAllBytes("file2.exe"); 
Byte[] filesplit = Encoding.Default.GetBytes("<<SPLITTER>>"); 

我使用其中我創建了一個fonction然後合併字節這些陣列,它只是給定的字節數組追加到另一個陣列的EOF,像這樣

AppendAllBytes("file1.exe", filesplit); 
AppendAllBytes("file1.exe", File.ReadAllBytes("file2.exe")); 

現在在file1.exe我有(Files.exe的字節+ Filesplit的字節+ File2.exe的字節)對不對?

我現在想要做的是創建一個函數,讓我通過查找整個文件的所有字節準確地提取File2.exe的字節數組,然後返回給我一個字節數組,文件分割後! (因爲file2.exe的字節在filesplit之後被添加到EOF)

+0

你到目前爲止嘗試過什麼?你卡在哪裏? 哦,順便說一句,如果任何文件包含相同的字節作爲您的分割它不可能恢復您的加入操作。 – 2012-02-24 10:35:47

+1

以及如果file1在某個點上包含短語「<>」,怎麼辦?處理二進制文件時,使用固定的序列來執行構圖非常危險。我建議你:改寫偏移或長度 - 即「[片段1的長度爲網絡字節順序uint32] [片段1] ... [片段n的長度爲網絡字節順序uint32] [片段n] 「 – 2012-02-24 10:36:35

+0

我想這樣做是爲了創建一個自解密exe文件,這是一個從EOF中提取字節數組並將其寫入另一個文件的文件,PS:在上面的例子中,我們建議分割器的字節數是在整個文件中是唯一的。 – 2012-02-24 10:38:54

回答

0

這將是一種錯誤的方法,因爲您的分離器也可能是您的字節數組的一部分。 更好的解決方案是;你創建一個類

class MyFiles 
{ 
    List<byte[]> ListOfFiles {get; set;} 
} 

然後,而不是附加的字節數組中添加字節數組列表對象

void AddToMyFiles(byte[] file) 
{ 
    _listOfFiles.Add(file); 
} 

現在序列結合您的數據和反序列化來提取數據

BinaryFormatter bf = new BinaryFormatter(); 

void AppendAllBytes(Stream outputStream) 
{ 
    bf.Serialize(outputStream, _listOfFiles);  
} 


MyFiles GetMyFiles() 
{ 
    return bf.Deserialize(inputStream) as MyFiles; 
} 

而且當然你可以根據你的需要嘗試任何格式的序列化。

我還沒有測試過這段代碼。這是在你的盤子;)