创建zip文件
using (var filestream = new filestream(savezipname, filemode.createnew))
{
// 使用内存流创建压缩文件
using (var archive = new ziparchive(filestream, ziparchivemode.create, true))
{
var files = directory.getfiles(taskdir, "*", searchoption.alldirectories);
foreach (var file in files)
{
//相对路径
var relativepath = path.getrelativepath(fileandfolderconfig.collectionspacefolder.path, file);
archive.createentryfromfile(file, relativepath);
}
}
}获取zip文件流,在内存中创建zip文件避免创建临时文件
using (var memorystream = new memorystream())
{
// 使用内存流创建压缩文件
using (var archive = new ziparchive(memorystream, ziparchivemode.create, true))
{
var files = directory.getfiles(taskdir, "*", searchoption.alldirectories);
foreach (var file in files)
{
//相对路径
var relativepath = path.getrelativepath(fileandfolderconfig.collectionspacefolder.path, file);
var entry = archive.createentry(relativepath, compressionlevel.optimal);
using var entrystream = entry.open();
using var filestream = file.openread(file);
await filestream.copytoasync(entrystream);
}
}
memorystream.position = 0; // 重置流位置
}下载文件并解压
// 下载文件到内存流
using (var memorystream = new memorystream())
{
await taskfile.copytoasync(memorystream);
taskfile.close();
memorystream.position = 0; // 重置流位置
using (var archive = new ziparchive(memorystream, ziparchivemode.read))
{
foreach (var entry in archive.entries)
{
var entryoutputpath = path.combine(fileandfolderconfig.collectionspacefolder.path, entry.fullname);
// 如果是目录条目,创建目录
if (string.isnullorempty(entry.name))
{
directory.createdirectory(path.getdirectoryname(entryoutputpath));
continue;
}
// 确保父目录存在
var parentdir = path.getdirectoryname(entryoutputpath);
if (!string.isnullorempty(parentdir))
{
directory.createdirectory(parentdir);
}
// 解压文件
entry.extracttofile(entryoutputpath, overwrite: true);
}
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论