/* ----------------------------------------------------------------- */ /// /// GetStream /// /// <summary> /// Gets the stream corresponding to the specified information. /// </summary> /// /* ----------------------------------------------------------------- */ private ArchiveStreamReader GetStream(Information src) { if (!src.Exists || src.IsDirectory) { return(null); } var dest = new ArchiveStreamReader(IO.OpenRead(src.FullName)); _streams.Add(dest); return(dest); }
/* ----------------------------------------------------------------- */ /// /// GetStream /// /// <summary> /// 読み込むボリュームに対応するストリームを取得します。 /// </summary> /// /// <param name="name">ボリューム名</param> /// <param name="stream">読み込みストリーム</param> /// /// <returns>OperationResult</returns> /// /* ----------------------------------------------------------------- */ public int GetStream(string name, out IInStream stream) { stream = Invoke(() => { var src = IO.Exists(name) ? name : IO.Combine(IO.Get(Source).DirectoryName, name); if (!IO.Exists(src)) { return(default(IInStream)); } var dest = new ArchiveStreamReader(IO.OpenRead(src)); _streams.Add(dest); return(dest); }); Result = (stream != null) ? OperationResult.OK : OperationResult.DataError; return((int)Result); }
/* ----------------------------------------------------------------- */ /// /// ArchiveReader /// /// <summary> /// Initializes a new instance of the ArchiveReader class with /// the specified arguments. /// </summary> /// /* ----------------------------------------------------------------- */ private ArchiveReader(Format format, string src, PasswordQuery password, IO io) { if (format == Format.Unknown) { throw new UnknownFormatException(); } var asr = new ArchiveStreamReader(io.OpenRead(src)); _core = new SevenZipLibrary(); _password = password; _open = new ArchiveOpenCallback(src, asr, io) { Password = _password }; _archive = _core.GetInArchive(format); _archive.Open(asr, IntPtr.Zero, _open); IO = io; Format = format; Source = src; Items = new ReadOnlyArchiveList(_archive, src, _password, io); }
/* ----------------------------------------------------------------- */ /// /// ArchiveReader /// /// <summary> /// Initializes a new instance of the ArchiveReader class with /// the specified arguments. /// </summary> /// /* ----------------------------------------------------------------- */ private ArchiveReader(Format format, string src, PasswordQuery query, IO io) { if (format == Format.Unknown) { throw new NotSupportedException(); } var asr = new ArchiveStreamReader(io.OpenRead(src)); _core = new SevenZipLibrary(); _query = query; _callback = new ArchiveOpenCallback(src, asr, io) { Password = _query }; _module = _core.GetInArchive(format); _module.Open(asr, IntPtr.Zero, _callback); IO = io; Format = format; Source = src; Items = new ReadOnlyArchiveList(_module, format, src, _query, io); }
/* ----------------------------------------------------------------- */ /// /// ArchiveOpenCallback /// /// <summary> /// オブジェクトを初期化します。 /// </summary> /// /// <param name="src">圧縮ファイルのパス</param> /// <param name="stream">圧縮ファイルの入力ストリーム</param> /// <param name="io">入出力用のオブジェクト</param> /// /* ----------------------------------------------------------------- */ public ArchiveOpenCallback(string src, ArchiveStreamReader stream, IO io) : base(src, io) { _dispose = new OnceAction <bool>(Dispose); _streams.Add(stream); }
/* ----------------------------------------------------------------- */ /// /// OpenCallback /// /// <summary> /// Initializes a new instance of the OpenCallback class with the /// specified arguments. /// </summary> /// /// <param name="src">Input stream of the archived file.</param> /// /* ----------------------------------------------------------------- */ public OpenCallback(ArchiveStreamReader src) => _streams.Add(src);