/// <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); }
internal MultiVolumeStream(IEnumerable <RarFilePart> parts, IRarExtractionListener listener) { this.listener = listener; filePartEnumerator = parts.GetEnumerator(); filePartEnumerator.MoveNext(); InitializeNextFilePart(); }
internal MultiVolumeStream(IEnumerable<RarFilePart> parts, IRarExtractionListener listener) { this.listener = listener; filePartEnumerator = parts.GetEnumerator(); filePartEnumerator.MoveNext(); InitializeNextFilePart(); }
/// <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); } }
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()); } }
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); } }
internal RarReader(RarOptions options, IRarExtractionListener listener) { this.listener = listener; this.options = options; listener.CheckNotNull("listener"); }
/// <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)); }
/// <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)); }
/// <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); }
internal SingleVolumeRarReader(Stream stream, RarOptions options, IRarExtractionListener listener) : base(options, listener) { this.stream = stream; }
internal MultiVolumeRarReader(IEnumerable <Stream> streams, RarOptions options, IRarExtractionListener listener) : base(options, listener) { this.streams = streams.GetEnumerator(); }
/// <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); }