コード例 #1
0
ファイル: FastZip.cs プロジェクト: IntegralLee/fomm
    /// <summary>
    ///   Extract the contents of a zip file.
    /// </summary>
    /// <param name="zipFileName">The zip file to extract from.</param>
    /// <param name="targetDirectory">The directory to save extracted information in.</param>
    /// <param name="overwrite">The style of <see cref="Overwrite">overwriting</see> to apply.</param>
    /// <param name="confirmDelegate">A delegate to invoke when confirming overwriting.</param>
    /// <param name="fileFilter">A filter to apply to files.</param>
    /// <param name="directoryFilter">A filter to apply to directories.</param>
    /// <param name="restoreDateTime">Flag indicating wether to restore the date and time for extracted files.</param>
    public void ExtractZip(string zipFileName, string targetDirectory, string fileFilter, string directoryFilter)
    {
      continueRunning_ = true;
      extractNameTransform_ = new WindowsNameTransform(targetDirectory);

      fileFilter_ = new NameFilter(fileFilter);
      directoryFilter_ = new NameFilter(directoryFilter);

      using (zipFile_ = new ZipFile(zipFileName))
      {
        var enumerator = zipFile_.GetEnumerator();
        while (continueRunning_ && enumerator.MoveNext())
        {
          var entry = (ZipEntry) enumerator.Current;
          if (entry.IsFile)
          {
            // TODO Path.GetDirectory can fail here on invalid characters.
            if (directoryFilter_.IsMatch(Path.GetDirectoryName(entry.Name)) && fileFilter_.IsMatch(entry.Name))
            {
              ExtractEntry(entry);
            }
          }
        }
      }
    }