asp.net c# ZIP文件压缩与解压

作者:袖梨 2022-06-25

asp教程.net c# zip文件压缩与解压

using system;
using system.collections.generic;
using system.text;
using system.io;
using icsharpcode.sharpziplib.zip;
using system.diagnostics;
using icsharpcode.sharpziplib.core;

namespace testconsole
{
    class program
    {
        static void main()
        {
            //createzipfile(@"d:", @"d:a.zip");
            unzipfile(@"d:a.zip");

            console.read();
        }

        private static void createzipfile(string filespath, string zipfilepath)
        {

            if (!directory.exists(filespath))
            {
                console.writeline("cannot find directory '{0}'", filespath);
                return;
            }

            try
            {
                string[] filenames = directory.getfiles(filespath);
                using (zipoutputstream s = new zipoutputstream(file.create(zipfilepath)))
                {

                    s.setlevel(9); // 压缩级别 0-9
                    //s.password = "123"; //zip压缩文件密码
                    byte[] buffer = new byte[4096]; //缓冲区大小
                    foreach (string file in filenames)
                    {
                        zipentry entry = new zipentry(path.getfilename(file));
                        entry.datetime = datetime.now;
                        s.putnextentry(entry);
                        using (filestream fs = file.openread(file))
                        {
                            int sourcebytes;
                            do
                            {
                                sourcebytes = fs.read(buffer, 0, buffer.length);
                                s.write(buffer, 0, sourcebytes);
                            } while (sourcebytes > 0);
                        }
                    }
                    s.finish();
                    s.close();
                }
            }
            catch (exception ex)
            {
                console.writeline("exception during processing {0}", ex);
            }
        }

        private static void unzipfile( string zipfilepath)
        {
            if (!file.exists(zipfilepath))
            {
                console.writeline("cannot find file '{0}'", zipfilepath);
                return;
            }

            using (zipinputstream s = new zipinputstream(file.openread(zipfilepath)))
            {

                zipentry theentry;
                while ((theentry = s.getnextentry()) != null)
                {

                    console.writeline(theentry.name);

                    string directoryname = path.getdirectoryname(theentry.name);
                    string filename = path.getfilename(theentry.name);

                    // create directory
                    if (directoryname.length > 0)
                    {
                        directory.createdirectory(directoryname);
                    }

                    if (filename != string.empty)
                    {
                        using (filestream streamwriter = file.create(theentry.name))
                        {

                            int size = 2048;
                            byte[] data = new byte[2048];
                            while (true)
                            {
                                size = s.read(data, 0, data.length);
                                if (size > 0)
                                {
                                    streamwriter.write(data, 0, size);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

}

虽然网上很多流行的压缩文件格式都是rar的,但是由于rar不是一个开放的标准,因此zip成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如sharpziplib就是一个不错的选择

相关文章

精彩推荐