当前位置: 代码网 > it编程>编程语言>Asp.net > C# ZipArchive加压解压zip文件方式

C# ZipArchive加压解压zip文件方式

2025年11月06日 Asp.net 我要评论
创建zip文件using (var filestream = new filestream(savezipname, filemode.createnew)){ // 使用内存流创建压缩文件

创建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);
                         }
                     }
                 }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com