using System.Collections.Generic; using System.IO; using SharpCompress.Common; using SharpCompress.Common.Rar; using SharpCompress.Common.Rar.Headers; using SharpCompress.IO; namespace SharpCompress.Archive.Rar { /// /// A rar part based on a FileInfo object /// internal class FileInfoRarArchiveVolume : RarVolume { internal FileInfoRarArchiveVolume(FileInfo fileInfo, Options options) : base(StreamingMode.Seekable, fileInfo.OpenRead(), FixOptions(options)) { FileInfo = fileInfo; FileParts = base.GetVolumeFileParts().ToReadOnly(); } private static Options FixOptions(Options options) { //make sure we're closing streams with fileinfo if (options.HasFlag(Options.KeepStreamsOpen)) { options = (Options)FlagUtility.SetFlag(options, Options.KeepStreamsOpen, false); } return options; } internal ReadOnlyCollection FileParts { get; private set; } internal FileInfo FileInfo { get; private set; } internal override RarFilePart CreateFilePart(FileHeader fileHeader, MarkHeader markHeader) { return new FileInfoRarFilePart(this, markHeader, fileHeader, FileInfo); } internal override IEnumerable ReadFileParts() { return FileParts; } public override FileInfo VolumeFile { get { return FileInfo; } } } }