Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件和文件夹打包到单个文件中_C#_Binary_Packing - Fatal编程技术网

C# 将文件和文件夹打包到单个文件中

C# 将文件和文件夹打包到单个文件中,c#,binary,packing,C#,Binary,Packing,我正在尝试创建一个程序,将文件夹中的一些文件归档到一个二进制文件中,以便以后可以从二进制归档中读取文件。 所以我创建了一个归档方法,但我真的不知道如何从二进制文件中读取文件而不解包 一些代码: public static void PackFiles() { using (var doFile = File.Create("root.extension")) using (var doBinary = new BinaryWriter(doFile)) {

我正在尝试创建一个程序,将文件夹中的一些文件归档到一个二进制文件中,以便以后可以从二进制归档中读取文件。 所以我创建了一个归档方法,但我真的不知道如何从二进制文件中读取文件而不解包

一些代码:

public static void PackFiles()
{
    using (var doFile = File.Create("root.extension"))
    using (var doBinary = new BinaryWriter(doFile))
    {
        foreach (var file in Directory.GetFiles("Data"))
        {
            doBinary.Write(true); 
            doBinary.Write(Path.GetFileName(file));
            var data = File.ReadAllBytes(file);
            doBinary.Write(data.Length);
            doBinary.Write(data);
        }
        doBinary.Write(false); 
    }
}
另外,我可以为二进制文件设置一种“密码”吗?这样,只有在知道密码的情况下才能解包归档文件


附言:我不需要拉链:)

我想最好的办法就是用拉链来做这个

有一个坚实而快速的库叫做

使用密码的示例:

using (ZipFile zip = new ZipFile())
{
    zip.Password= "123456!";
    zip.AddFile("ReadMe.txt");
    zip.AddFile("7440-N49th.png");
    zip.AddFile("2005_Annual_Report.pdf");        
    zip.Save("Backup.zip");
}

要读回这些文件,您需要创建一种方式让您知道或让它告诉您各种文件的开始和结束位置。对于密码,您必须将加密密码的散列存储在二进制文件中,然后让读取二进制文件的应用程序请求密码并将其与二进制文件中的加密散列进行比较。为什么不编写一个zip文件?您可以使用它打包、解包和使用密码。为什么?既然有这么多现成的软件可供使用,为什么还要编写自己的架构软件呢?其中包括加密(对任何有用的密码保护都是必要的)和压缩(较低的级别通常根本不会限制吞吐量)。你基本上是在说“所以我制作了我自己的归档格式,但我不知道如何制作我自己的归档格式”。我想要我自己的归档系统。不是拉链。