/// <summary>
        /// Инициализирует новый экземпляр <see cref="V8Document"/> из указанного контейнера.
        /// В качестве адреса документа будет взята текущая позиция основного потока контейнера.
        /// </summary>
        /// <param name="container">Контейнер, документ которого инициализируется.</param>
        public V8Document(V8Container container)
            : this(container, 0)
        {
            long address = _superStream.Position;
            if (address > MaxAddress)
            {
                throw new ArgumentOutOfRangeException(nameof(address));
            }

            _address = (int)address;
        }
        /// <summary>
        /// Инициализирует новый экземпляр <see cref="V8Document"/> из указанного контейнера.
        /// В качестве адреса документ будет использован <paramref name="address"/>.
        /// </summary>
        /// <param name="container">Контейнер, документ которого инициализируется.</param>
        /// <param name="address">Адрес документа.</param>
        public V8Document(V8Container container, int address)
        {
            if (address < 0 || address > MaxAddress)
            {
                throw new ArgumentOutOfRangeException(nameof(address));
            }

            _container = container ?? throw new ArgumentNullException(nameof(container));
            _superStream = container.MainStream;
            _address = address;

            Debug.Assert(_superStream.CanSeek);
        }
Пример #3
0
        /// <summary>
        /// Создает или перезаписывает указанный файл-контейнер и открывает его для записи.
        /// </summary>
        /// <param name="filename">Путь к файлу-контейнеру.</param>
        /// <returns>Созданный контейнер.</returns>
        public static V8Container Create(string filename)
        {
            if (filename == null)
            {
                throw new ArgumentNullException(nameof(filename));
            }

            var stream = File.Create(filename);

            V8Container container;

            try
            {
                container = new V8Container(stream, V8ContainerMode.Write);
            }
            catch
            {
                stream.Dispose();
                throw;
            }

            return(container);
        }
Пример #4
0
 private V8File(V8Container container, in FileAddress fileAddress)