File 如何检测和分离连接的文件?

File 如何检测和分离连接的文件?,file,concatenation,cat,File,Concatenation,Cat,我试图找到一种方法来分离使用 复制/b文件1+file2文件3 我知道这两个文件中至少有一个的mime类型和文件类型。使用以下csharp代码,您可以根据zip文件的签名进行拆分。如果EXE在某些位置具有相同的4字节,则此代码将中断。如果你想征服这一切,你就必须通过挖掘 不,这不是很有效的 使用(var fs=newfilestream(@“exeandzip.screwed”,FileMode.Open)) { var lfh=新字节[]{0x50,0x4b,0x03,0x04};/*zip本

我试图找到一种方法来分离使用
复制/b文件1+file2文件3


我知道这两个文件中至少有一个的mime类型和文件类型。

使用以下csharp代码,您可以根据zip文件的签名进行拆分。如果EXE在某些位置具有相同的4字节,则此代码将中断。如果你想征服这一切,你就必须通过挖掘

不,这不是很有效的

使用(var fs=newfilestream(@“exeandzip.screwed”,FileMode.Open))
{
var lfh=新字节[]{0x50,0x4b,0x03,0x04};/*zip本地文件头签名*/
var匹配=0;
var-splitAt=0;
var keep=新队列();
var b=fs.ReadByte();
使用(var exe=new FileStream)(
@“exeandzip.screwed.exe”,
FileMode.Create)
{
而((b!=-1)&(0)
{
exe.WriteByte((字节)keep.Dequeue());
}
exe.WriteByte((字节)b);
匹配=0;
}
b=fs.ReadByte();
}
}
如果(匹配==lfh.Length&&b!=-1)
{
保持排队(b);
splitAt=splitAt-lfh.长度;
控制台写入线(拆分);
使用(var zip=newfilestream)(
@“exeandzip.screwed.zip”,
FileMode.Create)
{ 
同时(保持.Count>0)
{
WriteByte((字节)keep.Dequeue());
}
b=fs.ReadByte();
而(b!=-1)
{  
zip.WriteByte((字节)b);
b=fs.ReadByte();
}
}
}   
}

或您可以使用
最前面的-i-o


我甚至以这种方式拆分了apple webarchive格式的文件

我认为找到备份和还原原始文件更容易…假设已知的文件类型是第一个文件。你打算如何从那里开始?根据你问题中的信息,你没有足够的信息来可靠地执行该任务。我没有原始的fi第一个文件是.exe,第二个是.zip
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();
            }
        }
    }   
}