2012-02-24 99 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; 
} 

而且当然你可以根据你的需要尝试任何格式的序列化。

我还没有测试过这段代码。这是在你的盘子;)