C# 压缩文件夹中所有文件

工具:ICSharpCode.SharpZipLib.dll

ICSharp只支持一级文件压缩,所以需要将子文件夹读出来根据路径压缩:
成员变量:

List<string> m_fileNames = new List<string>();

获取子文件夹:

public void GetChildFiles(string path)
{
	string[] fileNames = Directory.GetFiles(path);
	
	foreach(string fileName in fileNames)
	{
	    m_fileNames.Add(fileName);
	}
	
	string[] directoryNames = Directory.GetDirectories(path);
	if (directoryNames.Length > 0)
	{
	    foreach(string directoryName in directoryNames)
	    {
	        GetChildFiles(directoryName);
	    }
	}
}

压缩:

public int ZipFileMain(string[] args,string password)
{
    
    if(!Directory.Exists(args[0]))
    {
        return -1;                   //指定进行压缩的目录不存在
    }

    ZipOutputStream s = null;
    FileStream fs = null;

    try
    {
        GetChildFiles(args[0]);

        string filedirectory = Path.GetDirectoryName(args[1]);

        if (!Directory.Exists(filedirectory))
            Directory.CreateDirectory(filedirectory);

        s = new ZipOutputStream(File.Create(args[1]));

        s.SetLevel(6);

        //s.Password = password;

        foreach (string file in m_fileNames)
        {
            fs = File.OpenRead(file);                 //打开压缩文件
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            ZipEntry entry = new ZipEntry(file.Substring(args[0].Length+1));

            entry.DateTime = DateTime.Now;
            entry.Size = fs.Length;

            s.PutNextEntry(entry);
            s.Write(buffer, 0, buffer.Length);

            if (fs != null)
                fs.Close();
        }
    }
    catch(Exception ex)
    {
        if (fs != null)
            fs.Close();

        if(s!=null)
        {
            s.Finish();
            s.Close();
        }

        return -1;
    }

    if (s != null)
    {
        s.Finish();
        s.Close();
    }

    return 1;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值