将文件打包成一个,以便以后以编程方式解压缩它们

Daa*_*sin 0 c# packaging

是否可以将目录中的所有文件和文件夹打包并打包到单个包文件中,以便我可以通过网络传输此包,然后从包中解压缩所有文件和文件夹?

我尝试用C#查看ZIP文件,因为我的目标是相同的想法,但实际的方法只有.NET 3.5(我相信),我也希望程序非常轻量级,这意味着我不要如果我想解压缩/解压缩单个文件,我希望外围模块位于必须使用的位置.

我怎么能做到这一点?

fej*_*oco 5

只需使用BinaryWriter/Reader和您自己的格式.像这样的东西:

using (var fs = File.Create(...))
using (var bw = new BinaryWriter(fs))
{
    foreach (var file in Directory.GetFiles(...))
    {
        bw.Write(true); // means that a file will follow
        bw.Write(Path.GetFileName(file));
        var data = File.ReadAllBytes(file);
        bw.Write(data.Length);
        bw.Write(data);
    }
    bw.Write(false); // means end of file
}
Run Code Online (Sandbox Code Playgroud)

所以基本上你写一个bool意味着是否有下一个文件,每个文件的名称和内容,一个接一个.阅读恰恰相反.BinaryWriter/Reader处理所有事情(它知道每个字符串和字节数组有多长,你会准确地读回你写的内容).

这个解决方案缺少的是:不是行业标准(但非常简单),不存储任何额外的元数据(可以添加创建时间等),不使用校验和(可以在内容后添加SHA1哈希) ,不使用压缩(你说你不需要它),不能很好地处理大文件(有问题的部分是它将整个文件读入字节数组并写入,应该在100 MB以下工作得很好),不处理多级目录层次结构(当然可以添加).

编辑:BinaryR/W知道字符串长度,但不知道字节数组长度.我在字节数组之前添加了一个长度字段,以便可以像写入时一样回读它.