1.使用ZipOutputStream创建一个压缩包并往里面写入一或多个文件

1.第一种方法:

using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;
using System.Text;

namespace DownloadTest
{
    public class Program
    {
        static void Main(string[] args)
        {
            //多个文件写入压缩包
            string[] filePath = new string[] {
                "e://VicaTest//测试01.txt",
                "e://VicaTest//测试.vsd",
                "e://VicaTest//jianli5629.doc",
                "e://VicaTest//jianli5877.doc",
                "e://VicaTest//jianli6157.doc"
            };
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            using (ZipOutputStream s = new ZipOutputStream(File.Create(@"E:\test.zip")))
            {
                s.SetLevel(6);  //设置压缩等级,等级越高压缩效果越明显,但占用CPU也会更多
                foreach(var fp in filePath)
                {
                    using (FileStream fs = File.OpenRead(fp))
                    {
                        byte[] buffer = new byte[4 * 1024];  //缓冲区,每次操作大小
                        ZipEntry entry = new ZipEntry(Path.GetFileName(fp.Substring(0, fp.Length)));//创建压缩包内的文件
                        Console.WriteLine(fp.Substring(0, fp.Length));
                        entry.DateTime = DateTime.Now;  //文件创建时间
                        s.PutNextEntry(entry);          //将文件写入压缩包

                        int sourceBytes;
                        do
                        {
                            sourceBytes = fs.Read(buffer, 0, buffer.Length);    //读取文件内容(1次读4M,写4M)
                            s.Write(buffer, 0, sourceBytes);                    //将文件内容写入压缩相应的文件
                        } while (sourceBytes > 0);
                    }
                    s.CloseEntry();
                }
            }
        }
    }
}

 

第二种方法:

using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;
using System.Text;

namespace DownloadTest
{
    public class Program : IStaticDataSource
    {

        public string Str { get; set; }

        public Program(string str)
        {
            this.Str = str;
        }

        public Stream GetSource()
        {
            Stream s = new MemoryStream(Encoding.Default.GetBytes(Str));
            return s;
        }
        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            MemoryStream stream = new MemoryStream();
            using (ZipFile zip = ZipFile.Create(@"d:\test.zip"))
            {
                zip.BeginUpdate();
                StringDataSource d1 = new StringDataSource("this a test1");
                StringDataSource d2 = new StringDataSource("压缩文件2的内容");
                //添加文件 
                zip.Add(d1, "Test1.txt");
                zip.Add(d2, "Test2.txt");
                zip.CommitUpdate();
            }
        }
    }
}

你可能感兴趣的:(.net代码日志)