我正在尝试找到一种方法来分隔两个使用连接在一起的文件
copy /b file1+file2 file3
。
我知道两个文件中至少有一个的mime类型和文件类型。
答案 0 :(得分:1)
使用以下csharp代码,您可以根据zip文件的签名为4 bytes that indicates the local file header的事实进行拆分。如果EXE在某些地方具有相同的4个字节,则此代码将中断。如果你想征服你必须挖掘PE/COFF header to add up all section sizes
不,这对copy a stream byte by byte来说效率不高......
using(var fs = new FileStream(@"exeandzip.screwed", FileMode.Open))
{
var lfh = new byte[] { 0x50, 0x4b, 0x03, 0x04 }; /* zip local file header signature */
var match = 0;
var splitAt = 0;
var keep = new Queue<int>();
var b = fs.ReadByte();
using(var exe = new FileStream(
@"exeandzip.screwed.exe",
FileMode.Create))
{
while((b != -1) && (match<lfh.Length))
{ splitAt++;
if (b==lfh[match])
{
match++;
keep.Enqueue(b);
}
else
{
while(keep.Count>0)
{
exe.WriteByte((byte) keep.Dequeue());
}
exe.WriteByte((byte)b);
match=0;
}
b = fs.ReadByte();
}
}
if (match==lfh.Length && b!=-1)
{
keep.Enqueue(b);
splitAt = splitAt-lfh.Length;
Console.WriteLine(splitAt);
using(var zip = new FileStream(
@"exeandzip.screwed.zip",
FileMode.Create))
{
while(keep.Count>0)
{
zip.WriteByte((byte) keep.Dequeue());
}
b = fs.ReadByte();
while(b != -1)
{
zip.WriteByte((byte)b);
b = fs.ReadByte();
}
}
}
}
答案 1 :(得分:0)
或者你可以使用 foremost -i <input file> -o <output directory>
我什至用这种方式分割了apple webarchive格式的文件