SharpZipLib扩展:FastZip类支持解压单个文件(夹)

FastZip类增加两个函数:

/// <summary>
/// 解压一个文件(夹)到zip同级文件夹中
/// </summary>
/// <param name="zipFileName">zip文件路径</param>
/// <param name="entryName">要解压的文件</param>
public void ExtractEntry(string zipFileName, string entryName)
{
    ExtractEntry(zipFileName, entryName, null);
}

/// <summary>
/// 解压一个文件(夹)到指定文件夹中
/// </summary>
/// <param name="zipFileName">zip文件路径</param>
/// <param name="entryName">要解压的文件</param>
/// <param name="targetDirectory">目标路径</param>
public void ExtractEntry(string zipFileName, string entryName, string targetDirectory)
{
    if (targetDirectory == null)
        targetDirectory = Path.GetDirectoryName(zipFileName);

    entryName = entryName.Replace("\\", "/");
    if (string.IsNullOrEmpty(Path.GetExtension(entryName)) && !entryName.EndsWith("/"))
        entryName += "/";

    continueRunning_ = true;
    overwrite_ = Overwrite.Always;
    confirmDelegate_ = null;
    extractNameTransform_ = new WindowsNameTransform(targetDirectory);

    using (zipFile_ = new ZipFile(zipFileName))
    {

        if (password_ != null)
        {
            zipFile_.Password = password_;
        }

        System.Collections.IEnumerator enumerator = zipFile_.GetEnumerator();
        while (continueRunning_ && enumerator.MoveNext())
        {
            ZipEntry entry = (ZipEntry)enumerator.Current;

            if (entry.Name.Length >= entryName.Length && entry.Name.ToLower().Substring(0, entryName.ToLower().Length) == entryName.ToLower())
            {
                ExtractEntry(entry);
            }
        }
    }
}

使用示例:

(new FastZip()).ExtractEntry(@"E:\001a.zip", "a.txt");  //解压单个文件
(new FastZip()).ExtractEntry(@"E:\001a.zip", "test/a.dat"); //解压单个文件
(new FastZip()).ExtractEntry(@"E:\001a.zip", "images/");    //解压文件夹


SharpZipLib源码下载:http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

评论: 0 | 引用: 0 | 查看次数: 6367
发表评论
登录后再发表评论!