Exemplo n.º 1
0
        public static void Extract(CabinetOpenCabHandler openCabHandler, CabinetCloseCabHandler closeCabHandler,
                                   object openCabContext, bool autoChain, CabinetExtractOpenFileHandler openFileHandler,
                                   CabinetExtractCloseFileHandler closeFileHandler, object openFileContext,
                                   CabinetFilterFileHandler filterFileHandler, object filterContext,
                                   CabinetStatusCallback statusCallback, object statusContext)
        #endif // !CABMINIMAL
        {
            using (CabExtractor cabInstance = new CabExtractor())
            {
                cabInstance.openCabHandler    = openCabHandler;
                cabInstance.closeCabHandler   = closeCabHandler;
                cabInstance.openCabContext    = openCabContext;
                cabInstance.openFileHandler   = openFileHandler;
                cabInstance.closeFileHandler  = closeFileHandler;
                cabInstance.openFileContext   = openFileContext;
                cabInstance.filterFileHandler = filterFileHandler;
                cabInstance.filterFileContext = filterContext;
                cabInstance.fdiNotifyHandler  = new FDI.PFNNOTIFY(cabInstance.CabExtractNotify);
                cabInstance.nextCabinetName   = "";

                        #if !CABMINIMAL
                cabInstance.statusCallback = statusCallback;
                cabInstance.statusContext  = statusContext;

                if (statusCallback != null)
                {
                    CabinetFileInfo[] files = Cabinet.GetFiles(openCabHandler, closeCabHandler, openCabContext,
                                                               autoChain, filterFileHandler, filterContext);

                    cabInstance.status.totalFiles     = files.Length;
                    cabInstance.status.totalFileBytes = 0;

                    int prevFolder = -1, prevCabinet = -1;
                    for (int i = 0; i < files.Length; i++)
                    {
                        cabInstance.status.totalFileBytes += files[i].Length;
                        if (files[i].CabinetFolderNumber != prevFolder)                 // Assumes the results of GetFiles are grouped by folders
                        {
                            prevFolder = files[i].CabinetFolderNumber;
                            cabInstance.status.totalFolders++;
                        }
                        if (files[i].CabinetNumber != prevCabinet)
                        {
                            prevCabinet = files[i].CabinetNumber;
                            cabInstance.status.totalCabinets++;
                        }
                    }
                }
                        #endif // !CABMINIMAL

                for (short iCab = 0; (autoChain || iCab == 0) && cabInstance.nextCabinetName != null; iCab++)
                {
                    cabInstance.cabNumbers[""] = iCab;
                    cabInstance.Process();
                }
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Extracts files from a cabinet stream.
 /// </summary>
 /// <param name="stream">Stream for reading the cabinet file.</param>
 /// <param name="openFileHandler">Callback for opening streams for writing extracted files.</param>
 /// <param name="closeFileHandler">Callback for closing extracted file streams. This may be null, in which
 /// case the stream's <see cref="Stream.Close"/> method will be called.</param>
 /// <param name="openFileContext">User context object that will be passed to the
 /// <paramref name="openFileHandler"/> and <paramref name="closeFileHandler"/>.</param>
 /// <param name="filterFileHandler">Callback for filtering the list of extracted files.  If null,
 /// all files will be extracted.</param>
 /// <param name="filterContext">User context object that will be passed to the
 /// <paramref name="filterFileHandler"/>.</param>
 /// <param name="statusCallback">Callback for reporting extraction status.  This may be null
 /// if status is not desired.</param>
 /// <param name="statusContext">User context object passed to the <paramref name="statusCallback"/>.</param>
 /// <exception cref="CabinetExtractException">The stream is not a cabinet file or the cabinet file is corrupt.</exception>
 public static void Extract(Stream stream, CabinetExtractOpenFileHandler openFileHandler,
                            CabinetExtractCloseFileHandler closeFileHandler, object openFileContext,
                            CabinetFilterFileHandler filterFileHandler, object filterContext,
                            CabinetStatusCallback statusCallback, object statusContext)
 #endif
 {
     if (stream == null)
     {
         throw new ArgumentNullException("stream");
     }
     Cabinet.Extract(new CabinetOpenCabHandler(Cabinet.DefaultOpenCabHandler),
                     new CabinetCloseCabHandler(Cabinet.DefaultCloseCabHandler), stream, false, openFileHandler,
                     closeFileHandler, openFileContext, filterFileHandler, filterContext
                 #if !CABMINIMAL
                     , statusCallback, statusContext
                 #endif // !CABMINIMAL
                     );
 }
Exemplo n.º 3
0
 public static void Extract(CabinetOpenCabHandler openCabHandler, CabinetCloseCabHandler closeCabHandler,
                            object openCabContext, bool autoChain, CabinetExtractOpenFileHandler openFileHandler,
                            CabinetExtractCloseFileHandler closeFileHandler, object openFileContext,
                            CabinetFilterFileHandler filterFileHandler, object filterContext)
Exemplo n.º 4
0
 /// <summary>
 /// Extracts files from a cabinet stream.
 /// </summary>
 /// <param name="stream">Stream for reading the cabinet file.</param>
 /// <param name="openFileHandler">Callback for opening streams for writing extracted files.</param>
 /// <param name="closeFileHandler">Callback for closing extracted file streams. This may be null, in which
 /// case the stream's <see cref="Stream.Close"/> method will be called.</param>
 /// <param name="openFileContext">User context object that will be passed to the
 /// <paramref name="openFileHandler"/> and <paramref name="closeFileHandler"/>.</param>
 /// <param name="filterFileHandler">Callback for filtering the list of extracted files.  If null,
 /// all files will be extracted.</param>
 /// <param name="filterContext">User context object that will be passed to the
 /// <paramref name="filterFileHandler"/>.</param>
 /// <exception cref="CabinetExtractException">The stream is not a cabinet file or the cabinet file is corrupt.</exception>
 public static void Extract(Stream stream, CabinetExtractOpenFileHandler openFileHandler,
                            CabinetExtractCloseFileHandler closeFileHandler, object openFileContext,
                            CabinetFilterFileHandler filterFileHandler, object filterContext)