Ionic Zip - 打包整个目录,保存子目录并遍历所有文件

时间:2013-10-17 13:08:19

标签: c# loops zip

我想使用Ionic Zip在C#中打包一个目录。通常我会使用这段代码:

using (ZipFile pack = new ZipFile())
{      
    pack.AddDirectory(defPackageCreationPath + "\\installfiles", "");            
    pack.Save(outputPath + "\\package.mpp");
}

这很好用,但我需要遍历打包的每个文件来检查文件名中的字符,因为我有一些文件在打包时会被破坏,如果它们包含特定的字符。

重要的是,要添加的目录也包含子目录,需要将这些目录转移到zip文件并在其中创建。

如何?

2 个答案:

答案 0 :(得分:1)

不确定这是否是您要查找的内容,但您可以轻松获取包含子目录在内的所有文件的字符串数组。使用目录类

喜欢这样

string[] Files = Directory.GetFiles(@"M:\Backup", "*.*", SearchOption.AllDirectories);

foreach (string file in Files)
{
    DoTests(file);
}

这将包括文件的路径。

您将需要System.IO;

using System.IO;

答案 1 :(得分:0)

你也可以尝试这样的事情:

using (ZipFile pack = new ZipFile())
{
    pack.AddProgress += (s, eventArgs) =>
        {
            // check if EventType is Adding_AfterAddEntry or NullReferenceException will be thrown
            if (eventArgs.EventType == ZipProgressEventType.Adding_AfterAddEntry)
            {
                // Do the replacement here.
                // eventArgs.CurrentEntry is the current file processed and
                // eventArgs.CurrentEntry.FileName holds the file name
                //
                // Example: all files will begin with __
                eventArgs.CurrentEntry.FileName = "___" + eventArgs.CurrentEntry.FileName;
            }
        };

        pack.AddDirectory(defPackageCreationPath + "\\installfiles", "");            
        pack.Save(outputPath + "\\package.mpp");
    }
}