예제 #1
0
 /// <summary>
 /// Extracts files from the archive, giving a callback the choice what
 /// to do with each file. The order of the files is given by the archive.
 /// 7-Zip (and any other solid) archives are NOT supported.
 /// </summary>
 /// <param name="extractFileCallback">The callback to call for each file in the archive.</param>
 public void ExtractFiles(ExtractFileCallback extractFileCallback)
 {
     DisposedCheck();
     InitArchiveFileData(false);
     if (IsSolid)
     {
         // solid strategy
     }
     else
     {
         foreach (ArchiveFileInfo archiveFileInfo in ArchiveFileData)
         {
             var extractFileCallbackArgs = new ExtractFileCallbackArgs(archiveFileInfo);
             extractFileCallback(extractFileCallbackArgs);
             if (extractFileCallbackArgs.CancelExtraction)
             {
                 break;
             }
             if (extractFileCallbackArgs.ExtractToStream != null || extractFileCallbackArgs.ExtractToFile != null)
             {
                 bool callDone = false;
                 try
                 {
                     if (extractFileCallbackArgs.ExtractToStream != null)
                     {
                         ExtractFile(archiveFileInfo.Index, extractFileCallbackArgs.ExtractToStream);
                     }
                     else
                     {
                         using (var file = new FileStream(extractFileCallbackArgs.ExtractToFile, FileMode.CreateNew,
                                                       FileAccess.Write, FileShare.None, 8192))
                         {
                             ExtractFile(archiveFileInfo.Index, file);
                         }
                     }
                     callDone = true;
                 }
                 catch (Exception ex)
                 {
                     extractFileCallbackArgs.Exception = ex;
                     extractFileCallbackArgs.Reason = ExtractFileCallbackReason.Failure;
                     extractFileCallback(extractFileCallbackArgs);
                     if (!ThrowException(null, ex))
                     {
                         return;
                     }
                 }
                 if (callDone)
                 {
                     extractFileCallbackArgs.Reason = ExtractFileCallbackReason.Done;
                     extractFileCallback(extractFileCallbackArgs);
                 }
             }
         }
     }
 }
예제 #2
0
 public void ExtractFileCallback(ExtractFileCallbackArgs extractFileCallbackArgs)
 {
 }