/* ----------------------------------------------------------------- */
        ///
        /// 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);
        }
Ejemplo n.º 3
0
        /* ----------------------------------------------------------------- */
        ///
        /// 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);
        }
Ejemplo n.º 4
0
        /* ----------------------------------------------------------------- */
        ///
        /// 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);
        }
Ejemplo n.º 5
0
 /* ----------------------------------------------------------------- */
 ///
 /// 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);
 }
Ejemplo n.º 6
0
 /* ----------------------------------------------------------------- */
 ///
 /// 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);