是否可以将目录中的所有文件和文件夹打包并打包到单个包文件中,以便我可以通过网络传输此包,然后从包中解压缩所有文件和文件夹?
我尝试用C#查看ZIP文件,因为我的目标是相同的想法,但实际的方法只有.NET 3.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知道字符串长度,但不知道字节数组长度.我在字节数组之前添加了一个长度字段,以便可以像写入时一样回读它.