Saturday, 26 May 2012

Creating ZIP file in ASP.NET

public class Zip
{
public Zip()
{

}

    static string writetofilepath = System.Web.HttpContext.Current.Server.MapPath("~/Files/");
      

    public static void WriteZipFile(string[] filesToZip, string writeToFilePath)
    {

        try
        {
            if (EnsureDirectory(writetofilepath))
            {

                Crc32 crc = new Crc32();
                FileStream fs1 = File.Create(writeToFilePath);
                ZipOutputStream s = new ZipOutputStream(fs1);
                s.SetLevel(9); // 0 - store only to 9 - means best compression

                for (int i = 0; i < filesToZip.Length; i++)
                {

                    // Must use a relative path here so that files show up in the Windows Zip File Viewer
                    // .. hence the use of Path.GetFileName(...)
                    ZipEntry entry = new ZipEntry(Path.GetFileName(writetofilepath + filesToZip[i]));
                    entry.DateTime = DateTime.Now;

                    // Read in the
                    using (FileStream fs = File.OpenRead(writetofilepath + filesToZip[i]))
                    {

                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);

                        // set Size and the crc, because the information
                        // about the size and crc should be stored in the header
                        // if it is not set it is automatically written in the footer.
                        // (in this case size == crc == -1 in the header)
                        // Some ZIP programs have problems with zip files that don't store
                        // the size and crc in the header.
                        entry.Size = fs.Length;
                        fs.Close();

                        crc.Reset();
                        crc.Update(buffer);
                        entry.Crc = crc.Value;
                        s.PutNextEntry(entry);
                        s.Write(buffer, 0, buffer.Length);
                    }
                }

                s.Finish();
                s.Close();
            }
        }
        catch (Exception ex)
        {
            HttpContext.Current.Trace.Warn(ex.ToString());
        }
    }

    private static bool EnsureDirectory(string path)
    {
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        return true;
    }

    public string[] getdir()
    {
        DirectoryInfo di = new DirectoryInfo(writetofilepath);
        FileInfo[] rgFiles = di.GetFiles("*.pdf");

        string[] files = new string[rgFiles.Length];
        int i = 0;
        foreach (FileInfo fi in rgFiles)
        {
            files[i] = fi.Name;
            i++;
        }
        return files;
    }

}

No comments:

Post a Comment

Note: only a member of this blog may post a comment.