【问题标题】:converting files in to single zip using C#使用 C# 将文件转换为单个 zip
【发布时间】:2011-03-07 07:39:59
【问题描述】:

我正在为 aspx 页面使用 C# 代码。我需要将多个文件转换为 Windows 默认 zip 软件可以读取的单个 zip 文件。

任何人都可以对此有所了解吗...?

【问题讨论】:

  • 如果您编写了自己的代码,也许您可​​以发布它,这样您就可以轻松地为单个文件执行此操作了。
  • 你能告诉你如何发送多个文件,你是通过 URL 来做的吗?

标签: c# asp.net zip zipcode


【解决方案1】:

查看本教程:Creating Zip archives in .NET (without an external library like SharpZipLib)

ZipFile zip= new ZipFile("MyNewZip.zip"); 
zip.AddDirectory("My Pictures", true); // AddDirectory recurses subdirectories
zip.Save(); 

或者你可以使用SharpZipLib

【讨论】:

  • 如何获取 System.io.packaging。它没有出现在 .aspx.cs 页面中?
  • 默认情况下,在 aspx.cs 文件中 System.IO 正在工作。但 System.IO.Packaging 不起作用。
  • 是的。我得到了解决方案,只需添加 WindowsBase.dll 就可以了。谢谢。
  • @Remesh,没问题,很高兴我能帮上忙。
  • 如果我想分发我的代码,DotNetZip 或 SharpZipLib 哪个是免费的或从开发人员的角度来看是低成本的。
【解决方案2】:

【讨论】:

    【解决方案3】:

    DotNetZip 是一款优秀的开源软件,没有任何许可问题。

    【讨论】:

    • DotNetZip 免费获得许可。
    • @Ramesh.kvbr - 我相信是 MS-Pl,但请阅读文档,我不是律师 :-)
    【解决方案4】:

    //使用这个库 SharpZipLib.
    使用它,您可以发送多个文件用于压缩哪个用户选择,并可以将其保存到您在客户端上指定的物理路径。

    public string zipfile(string[] files)
        {
    
    
            string[] filenames = new string[files.Length];
    
    
                for (int i = 0; i < files.Length; i++)
                    filenames[i] = HttpContext.Current.Request.PhysicalApplicationPath + files[i].Remove(0, 10// set it according to your filename).ToString();
            else
                for (int i = 0; i < files.Length; i++)
                    filenames[i] = HttpContext.Current.Request.PhysicalApplicationPath + files[i].Replace(HttpContext.Current.Request.UrlReferrer.ToString(), "");
            string DirectoryName = filenames[0].Remove(filenames[0].LastIndexOf('/'));
            DirectoryName = DirectoryName.Substring(DirectoryName.LastIndexOf('/') + 1).Replace("\\", "");
    
            try
            {
    
                string newFile = HttpContext.Current.Request.PhysicalApplicationPath + "the physical path where you want to save it" + DirectoryName + ".zip";
                if (File.Exists(newFile))
                    File.Delete(newFile);
                using (ZipFile zip = new ZipFile())
                {
    
                    foreach (string file in filenames)
                    {
    
                        string newfileName = file.Replace("\\'", "'");
                        zip.CompressionLevel = 0;
                        zip.AddFile(newfileName, "");
                    }
    
                    zip.Save(newFile);
                }
            }
    

    【讨论】:

    • 您是否检查过一次代码。你用的是哪个dll? zip.save 和 ZipFile() 方法说在 sharpziplib 中不存在。
    • 该代码看起来确实适用于 DotNetZip,而不是 SharpZipLIb。
    • @Ramesh.kbvr 此代码使用的是 sharpziplib.dll,zipfile 是 ionnic.zip.dll 类的对象 :) 您可以进一步查看如何在 c# @987654321 中使用 ionic.zip.dll @
    • 我不明白你的意思。重复我所说的:您帖子中的代码(上图)看起来使用的是 DotNetZip,而不是 SharpZipLib。正如 Ramesh 指出的,sharpziplib 没有这些类和方法。甚至您自己也明显指出,ZipFile 是 Ionic.Zip.dll (DotNetZip) 中的一个类。
    猜你喜欢
    • 2011-04-22
    • 2016-12-30
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2017-01-08
    • 2013-08-11
    相关资源
    最近更新 更多