How to zip multiple files using only .net api in c#

前端 未结 9 1179
灰色年华
灰色年华 2020-12-01 09:04

I like to zip multiple files which are being created dynamically in my web application. Those files should be zipped. For this, i dont want to use any third-party tools. jus

相关标签:
9条回答
  • 2020-12-01 09:39

    Well you can zip the files using following function you have to just pass the file bytes and this function will zip the file bytes passed as parameter and return the zipped file bytes.

     public static byte[] PackageDocsAsZip(byte[] fileBytesTobeZipped, string packageFileName)
    {
        try
        {
            string parentSourceLoc2Zip = @"C:\\\\UploadedDocs"\SG-ACA OCI Packages";
            if (Directory.Exists(parentSourceLoc2Zip) == false)
            {
                Directory.CreateDirectory(parentSourceLoc2Zip);
            }
    
            //if destination folder already exists then delete it
            string sourceLoc2Zip = string.Format(@"{0}\{1}", parentSourceLoc2Zip, packageFileName);
            if (Directory.Exists(sourceLoc2Zip) == true)
            {
                Directory.Delete(sourceLoc2Zip, true);
            }
            Directory.CreateDirectory(sourceLoc2Zip);
    
    
    
                 FilePath = string.Format(@"{0}\{1}",
                        sourceLoc2Zip,
                        "filename.extension");//e-g report.xlsx , report.docx according to exported file
    
                 File.WriteAllBytes(FilePath, fileBytesTobeZipped);
    
    
    
    
            //if zip already exists then delete it
            if (File.Exists(sourceLoc2Zip + ".zip"))
            {
                File.Delete(sourceLoc2Zip + ".zip");
            }
    
            //now zip the source location
            ZipFile.CreateFromDirectory(sourceLoc2Zip, sourceLoc2Zip + ".zip", System.IO.Compression.CompressionLevel.Optimal, true);
    
            return File.ReadAllBytes(sourceLoc2Zip + ".zip");
        }
        catch
        {
            throw;
        }
    }
    

    Now if you want to export this zip bytes created for user to download you can call this function using following lines

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment; filename=Report.zip");
        Response.ContentType = "application/zip";
        Response.BinaryWrite(PackageDocsAsZip(fileBytesToBeExported ,"TemporaryFolderName"));
        Response.End();
    
    0 讨论(0)
  • 2020-12-01 09:46

    Use System.IO.Packaging in .NET 3.0+.

    See this introduction to System.IO.Packaging


    If you're able to take a .NET 4.5 dependency, there's a System.IO.Compression.ZipArchive in that universe; see walkthrough article here (via InfoQ news summary article here)

    0 讨论(0)
  • 2020-12-01 09:46

    I'm not sure what you mean by not wanting to use thrid party tools, but I assume its that you don't want some nasty interop to programmatically do it through another piece of software.

    I recommend using ICSharpCode SharpZipLib

    This can be added to your project as a reference DLL and is fairly straightforward for creating ZIP files and reading them.

    0 讨论(0)
  • 2020-12-01 09:46

    You could always call a third-party executable like 7-zip with an appropriate command line using the System.Diagnostics.Process class. There's no interop that way because you're just asking the OS to launch a binary.

    0 讨论(0)
  • 2020-12-01 09:50

    Simple zip file with flat structure:

    using System.IO;
    using System.IO.Compression;
    
    private static void CreateZipFile(IEnumerable<FileInfo> files, string archiveName)
    {
        using (var stream = File.OpenWrite(archiveName))
        using (ZipArchive archive = new ZipArchive(stream, System.IO.Compression.ZipArchiveMode.Create))
        {
             foreach (var item in files)
             {
                 archive.CreateEntryFromFile(item.FullName, item.Name, CompressionLevel.Optimal);                       
             }
         }
    }
    

    You need to add reference to System.IO.Compression and System.IO.Compression.FileSystem

    0 讨论(0)
  • 2020-12-01 09:50

    Check out System.IO.Compression.DeflateStream. Youll find a couple of examples on msdn http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx

    0 讨论(0)
提交回复
热议问题