Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 681525
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T01:29:35+00:00 2026-05-14T01:29:35+00:00

I have seen many tutorials on how to compress a single file in c#.

  • 0

I have seen many tutorials on how to compress a single file in c#. But I need to be able to create a normal *.zip file out of more than just one file. Is there anything in .NET that can do this? What would you suggest (baring in mind I’m under strict rules and cannot use other libraries)

Thank you

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T01:29:35+00:00Added an answer on May 14, 2026 at 1:29 am

    Edit: if you’re using .Net 4.5 or later this is built-in to the framework

    For earlier versions or for more control you can use Windows’ shell functions as outlined here on CodeProject by Gerald Gibson Jr.

    I have copied the article text below as written (original license: public domain)

    Compress Zip files with Windows Shell API and C

    enter image description here

    Introduction

    This is a follow up article to the one that I wrote about decompressing Zip files. With this code you can use the Windows Shell API in C# to compress Zip files and do so without having to show the Copy Progress window shown above. Normally when you use the Shell API to compress a Zip file, it will show a Copy Progress window even when you set the options to tell Windows not to show it. To get around this, you move the Shell API code to a separate executable and then launch that executable using the .NET Process class being sure to set the process window style to ‘Hidden’.

    Background

    Ever needed to compress Zip files and needed a better Zip than what comes with many of the free compression libraries out there? I.e. you needed to compress folders and subfolders as well as files. Windows Zipping can compress more than just individual files. All you need is a way to programmatically get Windows to silently compress these Zip files. Of course you could spend $300 on one of the commercial Zip components, but it’s hard to beat free if all you need is to compress folder hierarchies.

    Using the code

    The following code shows how to use the Windows Shell API to compress a Zip file. First you create an empty Zip file. To do this create a properly constructed byte array and then save that array as a file with a ‘.zip’ extension. How did I know what bytes to put into the array? Well I just used Windows to create a Zip file with a single file compressed inside. Then I opened the Zip with Windows and deleted the compressed file. That left me with an empty Zip. Next I opened the empty Zip file in a hex editor (Visual Studio) and looked at the hex byte values and converted them to decimal with Windows Calc and copied those decimal values into my byte array code. The source folder points to a folder you want to compress. The destination folder points to the empty Zip file you just created. This code as is will compress the Zip file, however it will also show the Copy Progress window. To make this code work, you will also need to set a reference to a COM library. In the References window, go to the COM tab and select the library labeled ‘Microsoft Shell Controls and Automation’.

    //Create an empty zip file
    byte[] emptyzip = new byte[]{80,75,5,6,0,0,0,0,0, 
                      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    
    FileStream fs = File.Create(args[1]);
    fs.Write(emptyzip, 0, emptyzip.Length);
    fs.Flush();
    fs.Close();
    fs = null;
    
    //Copy a folder and its contents into the newly created zip file
    Shell32.ShellClass sc = new Shell32.ShellClass();
    Shell32.Folder SrcFlder = sc.NameSpace(args[0]);
    Shell32.Folder DestFlder = sc.NameSpace(args[1]); 
    Shell32.FolderItems items = SrcFlder.Items();
    DestFlder.CopyHere(items, 20);
    
    //Ziping a file using the Windows Shell API 
    //creates another thread where the zipping is executed.
    //This means that it is possible that this console app 
    //would end before the zipping thread 
    //starts to execute which would cause the zip to never 
    //occur and you will end up with just
    //an empty zip file. So wait a second and give 
    //the zipping thread time to get started
    System.Threading.Thread.Sleep(1000);
    

    The sample solution included with this article shows how to put this code into a console application and then launch this console app to compress the Zip without showing the Copy Progress window.

    The code below shows a button click event handler that contains the code used to launch the console application so that there is no UI during the compress:

    private void btnUnzip_Click(object sender, System.EventArgs e)
    {
        //Test to see if the user entered a zip file name
        if(txtZipFileName.Text.Trim() == "")
        {
            MessageBox.Show("You must enter what" + 
                   " you want the name of the zip file to be");
            //Change the background color to cue the user to what needs fixed
            txtZipFileName.BackColor = Color.Yellow;
            return;
        }
        else
        {
            //Reset the background color
            txtZipFileName.BackColor = Color.White;
        }
    
        //Launch the zip.exe console app to do the actual zipping
        System.Diagnostics.ProcessStartInfo i =
            new System.Diagnostics.ProcessStartInfo(
            AppDomain.CurrentDomain.BaseDirectory + "zip.exe");
        i.CreateNoWindow = true;
        string args = "";
    
        
        if(txtSource.Text.IndexOf(" ") != -1)
        {
            //we got a space in the path so wrap it in double qoutes
            args += "\"" + txtSource.Text + "\"";
        }
        else
        {
            args += txtSource.Text;
        }
    
        string dest = txtDestination.Text;
    
        if(dest.EndsWith(@"\") == false)
        {
            dest += @"\";
        }
    
        //Make sure the zip file name ends with a zip extension
        if(txtZipFileName.Text.ToUpper().EndsWith(".ZIP") == false)
        {
            txtZipFileName.Text += ".zip";
        }
    
        dest += txtZipFileName.Text;
    
        if(dest.IndexOf(" ") != -1)
        {
            //we got a space in the path so wrap it in double qoutes
            args += " " + "\"" + dest + "\"";
        }
        else
        {
            args += " " + dest;
        }
    
        i.Arguments = args;
        
    
        //Mark the process window as hidden so 
        //that the progress copy window doesn't show
        i.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;    
        System.Diagnostics.Process p = System.Diagnostics.Process.Start(i);
        p.WaitForExit();
        MessageBox.Show("Complete");
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.