コード例 #1
0
        /// <summary>
        /// Extract to specific directory, retaining filename
        /// </summary>
        public static void WriteToDirectory(this RarArchiveEntry entry, string destinationDirectory,
            IRarExtractionListener listener,
            ExtractOptions options = ExtractOptions.Overwrite)
        {
            string destinationFileName = string.Empty;
            string file = Path.GetFileName(entry.FilePath);


            if (options.HasFlag(ExtractOptions.ExtractFullPath))
            {

                string folder = Path.GetDirectoryName(entry.FilePath);
                destinationDirectory = Path.Combine(destinationDirectory, folder);
                destinationFileName = Path.Combine(destinationDirectory, file);
            }
            else
            {
                destinationFileName = Path.Combine(destinationDirectory, file);
            }
            if (!Directory.Exists(destinationDirectory))
            {
                Directory.CreateDirectory(destinationDirectory);
            }

            entry.WriteToFile(destinationFileName, listener, options);
        }
コード例 #2
0
        /// <summary>
        /// Extract to specific directory, retaining filename
        /// </summary>
        public static void WriteToDirectory(this RarArchiveEntry entry, string destinationDirectory,
                                            IRarExtractionListener listener,
                                            ExtractOptions options = ExtractOptions.Overwrite)
        {
            string destinationFileName = string.Empty;
            string file = Path.GetFileName(entry.FilePath);


            if (options.HasFlag(ExtractOptions.ExtractFullPath))
            {
                string folder = Path.GetDirectoryName(entry.FilePath);
                destinationDirectory = Path.Combine(destinationDirectory, folder);
                destinationFileName  = Path.Combine(destinationDirectory, file);
            }
            else
            {
                destinationFileName = Path.Combine(destinationDirectory, file);
            }
            if (!Directory.Exists(destinationDirectory))
            {
                Directory.CreateDirectory(destinationDirectory);
            }

            entry.WriteToFile(destinationFileName, listener, options);
        }
コード例 #3
0
        internal MultiVolumeStream(IEnumerable <RarFilePart> parts,
                                   IRarExtractionListener listener)
        {
            this.listener = listener;

            filePartEnumerator = parts.GetEnumerator();
            filePartEnumerator.MoveNext();
            InitializeNextFilePart();
        }
コード例 #4
0
        internal MultiVolumeStream(IEnumerable<RarFilePart> parts,
            IRarExtractionListener listener)
        {
            this.listener = listener;

            filePartEnumerator = parts.GetEnumerator();
            filePartEnumerator.MoveNext();
            InitializeNextFilePart();
        }
コード例 #5
0
        /// <summary>
        /// Extract to specific file
        /// </summary>
        public static void WriteToFile(this RarArchiveEntry entry, string destinationFileName,
                        IRarExtractionListener listener,
            ExtractOptions options = ExtractOptions.Overwrite)
        {
            FileMode fm = FileMode.Create;

            if (!options.HasFlag(ExtractOptions.Overwrite))
            {
                fm = FileMode.CreateNew;
            }
            using (FileStream fs = File.Open(destinationFileName, fm))
            {
                entry.WriteTo(fs, listener);
            }
        }
コード例 #6
0
        /// <summary>
        /// Extract to specific file
        /// </summary>
        public static void WriteToFile(this RarArchiveEntry entry, string destinationFileName,
                                       IRarExtractionListener listener,
                                       ExtractOptions options = ExtractOptions.Overwrite)
        {
            FileMode fm = FileMode.Create;

            if (!options.HasFlag(ExtractOptions.Overwrite))
            {
                fm = FileMode.CreateNew;
            }
            using (FileStream fs = File.Open(destinationFileName, fm))
            {
                entry.WriteTo(fs, listener);
            }
        }
コード例 #7
0
        public void WriteTo(Stream streamToWriteTo, IRarExtractionListener listener)
        {
            if (IsEncrypted)
            {
                throw new RarExtractionException("Entry is password protected and cannot be extracted.");
            }

            if (IsDirectory)
            {
                throw new RarExtractionException("Entry is a file directory and cannot be extracted.");
            }

            listener.CheckNotNull("listener");
            listener.OnFileEntryExtractionInitialized(FilePath, CompressedSize);
            using (Stream input = new MultiVolumeStream(parts, listener))
            {
                var pack = new Unpack.Unpack(FileHeader, input, streamToWriteTo);
                pack.doUnpack(Archive.IsSolidArchive());
            }
        }
コード例 #8
0
        public void WriteTo(Stream streamToWriteTo, IRarExtractionListener listener)
        {
            if (IsEncrypted)
            {
                throw new RarExtractionException("Entry is password protected and cannot be extracted.");
            }

            if (IsDirectory)
            {
                throw new RarExtractionException("Entry is a file directory and cannot be extracted.");
            }

            listener.CheckNotNull("listener");
            listener.OnFileEntryExtractionInitialized(FilePath, CompressedSize);
            using (Stream input = new MultiVolumeStream(parts, listener))
            {
                var pack = new Unpack.Unpack(FileHeader, input, streamToWriteTo);
                pack.doUnpack(Archive.IsSolidArchive());
            }
        }
コード例 #9
0
        public static void WriteToDirectory(string sourceArchive, string destinationDirectory, IRarExtractionListener listener,
                                            ExtractOptions options = ExtractOptions.Overwrite)
        {
            RarArchive archive = RarArchive.Open(sourceArchive);

            foreach (RarArchiveEntry entry in archive.Entries)
            {
                entry.WriteToDirectory(destinationDirectory, listener, options);
            }
        }
コード例 #10
0
 internal RarReader(RarOptions options, IRarExtractionListener listener)
 {
     this.listener = listener;
     this.options = options;
     listener.CheckNotNull("listener");
 }
コード例 #11
0
 internal RarReader(RarOptions options, IRarExtractionListener listener)
 {
     this.listener = listener;
     this.options  = options;
     listener.CheckNotNull("listener");
 }
コード例 #12
0
 /// <summary>
 /// Opens a RarReader for Non-seeking usage with multiple volumes
 /// </summary>
 /// <param name="streams"></param>
 /// <param name="listener"></param>
 /// <param name="options"></param>
 /// <returns></returns>
 public static RarReader Open(IEnumerable <Stream> streams, IRarExtractionListener listener,
                              RarOptions options = RarOptions.KeepStreamsOpen)
 {
     streams.CheckNotNull("streams");
     return(new MultiVolumeRarReader(streams, options, listener));
 }
コード例 #13
0
 /// <summary>
 /// Opens a RarReader for Non-seeking usage with a single volume
 /// </summary>
 /// <param name="stream"></param>
 /// <param name="listener"></param>
 /// <param name="options"></param>
 /// <returns></returns>
 public static RarReader Open(Stream stream, IRarExtractionListener listener,
                              RarOptions options = RarOptions.KeepStreamsOpen)
 {
     stream.CheckNotNull("stream");
     return(new SingleVolumeRarReader(stream, options, listener));
 }
コード例 #14
0
 /// <summary>
 /// Opens a RarReader for Non-seeking usage with multiple volumes
 /// </summary>
 /// <param name="streams"></param>
 /// <param name="listener"></param>
 /// <param name="options"></param>
 /// <returns></returns>
 public static RarReader Open(IEnumerable<Stream> streams, IRarExtractionListener listener,
                              RarOptions options = RarOptions.KeepStreamsOpen)
 {
     streams.CheckNotNull("streams");
     return new MultiVolumeRarReader(streams, options, listener);
 }
コード例 #15
0
 public static void WriteToDirectory(string sourceArchive, string destinationDirectory, IRarExtractionListener listener,
     ExtractOptions options = ExtractOptions.Overwrite)
 {
     RarArchive archive = RarArchive.Open(sourceArchive);
     foreach (RarArchiveEntry entry in archive.Entries)
     {
         entry.WriteToDirectory(destinationDirectory, listener, options);
     }
 }
コード例 #16
0
 internal SingleVolumeRarReader(Stream stream, RarOptions options, IRarExtractionListener listener)
     : base(options, listener)
 {
     this.stream = stream;
 }
コード例 #17
0
 internal SingleVolumeRarReader(Stream stream, RarOptions options, IRarExtractionListener listener)
     : base(options, listener)
 {
     this.stream = stream;
 }
コード例 #18
0
 internal MultiVolumeRarReader(IEnumerable <Stream> streams, RarOptions options, IRarExtractionListener listener)
     : base(options, listener)
 {
     this.streams = streams.GetEnumerator();
 }
コード例 #19
0
 /// <summary>
 /// Opens a RarReader for Non-seeking usage with a single volume
 /// </summary>
 /// <param name="stream"></param>
 /// <param name="listener"></param>
 /// <param name="options"></param>
 /// <returns></returns>
 public static RarReader Open(Stream stream, IRarExtractionListener listener,
                              RarOptions options = RarOptions.KeepStreamsOpen)
 {
     stream.CheckNotNull("stream");
     return new SingleVolumeRarReader(stream, options, listener);
 }