locked
Zip empty text file RRS feed

  • Question

  • Hi All,

    In my project I am using "icsharpcode.sharpziplib" for zipping folders with many type of files in it.

    Here is my code,

    private void ZipFiles(string inputFolderPath)
            {
                try
                {
                    ArrayList ar = GenerateFileList(inputFolderPath); // generate file list
                    int TrimLength = inputFolderPath.Length;
                    byte[] obuffer;
                    string outPath = Path.Combine(inputFolderPath, "Compressed.zip");
                    ZipOutputStream oZipStream = new ZipOutputStream(File.Create(outPath));
                    // create zip stream            
                    oZipStream.SetLevel(9); // maximum compression
                    ZipEntry oZipEntry;
                    foreach(string Fil in ar) // for each file, generate a zipentry
                    {
                        oZipEntry = new ZipEntry(Fil.Remove(0, TrimLength));
                        oZipStream.PutNextEntry(oZipEntry);
                        if(!Fil.EndsWith(@"/")) // if a file ends with '/' its a directory
                        {
                            FileStream ostream = File.OpenRead(Fil);
                            obuffer = new byte[ostream.Length];
                            ostream.Read(obuffer, 0, obuffer.Length);
                            oZipStream.Write(obuffer, 0, obuffer.Length);
                            ostream.Flush();
                            ostream.Close();
                        }
                    }
                    oZipStream.Finish();
                    oZipStream.Close();
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    private ArrayList GenerateFileList(string Dir)
            {
                ArrayList fils = new ArrayList();
                try
                {
                    bool Empty = true;
                    foreach(string file in Directory.GetFiles(Dir)) // add each file in directory
                    {
                        fils.Add(file);
                        Empty = false;
                    }
                    if(Empty)
                    {
                        if(Directory.GetDirectories(Dir).Length == 0)
                        // if directory is completely empty, add it
                        {
                            fils.Add(Dir + @"/");
                        }
                    }
                    foreach(string dirs in Directory.GetDirectories(Dir)) // recursive
                    {
                        foreach(object obj in GenerateFileList(dirs))
                        {
                            fils.Add(obj);
                        }
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                return fils; // return file list
            }

    My program runs in a perfect way. After compression is done, when i manually tried to extract the compressed file using "Winzip", it throws error as "Invalid compressed data to extract".

    I found the cause of this error, ie when trying to extract an empty text file from the compressed file.

    Could anyone help me in this to get rid of this error?

    Thanks in advance.

    Friday, January 25, 2013 10:17 AM

Answers