コード例 #1
0
        public VirtualLoadInfo(IFileState parentFileState, IArchiveState archiveState, ArchiveFileInfo afi, IFilePlugin plugin) :
            this(parentFileState, archiveState, afi)
        {
            ContractAssertions.IsNotNull(plugin, nameof(plugin));

            Plugin = plugin;
        }
コード例 #2
0
        public ArchiveContext(ContextNode contextNode, IContext parentContext, IInternalPluginManager pluginManager) : base(pluginManager, contextNode)
        {
            ContractAssertions.IsNotNull(contextNode, nameof(contextNode));
            ContractAssertions.IsNotNull(parentContext, nameof(parentContext));

            _stateInfo         = contextNode.StateInfo;
            _archiveState      = _stateInfo.PluginState as IArchiveState;
            _archiveFileSystem = FileSystemFactory.CreateAfiFileSystem(_stateInfo);
            _parentContext     = parentContext;
        }
コード例 #3
0
        public VirtualLoadInfo(IFileState parentFileState, IArchiveState archiveState, ArchiveFileInfo afi)
        {
            ContractAssertions.IsNotNull(parentFileState, nameof(parentFileState));
            ContractAssertions.IsNotNull(archiveState, nameof(archiveState));
            ContractAssertions.IsNotNull(afi, nameof(afi));
            ContractAssertions.IsElementContained(archiveState.Files, afi, nameof(archiveState), nameof(afi));

            ParentFileState = parentFileState;
            ArchiveState    = archiveState;
            Afi             = afi;
        }
コード例 #4
0
        private void InjectArchive(IArchiveState archiveState, UPath filePath, IFileSystem destinationFileSystem)
        {
            foreach (var afi in archiveState.Files)
            {
                var path = filePath / afi.FilePath.ToRelative();
                if (!destinationFileSystem.FileExists(path))
                {
                    continue;
                }

                var afiFileStream = destinationFileSystem.OpenFile(path);
                afi.SetFileData(afiFileStream);
            }
        }
コード例 #5
0
        private async Task ExtractArchive(IArchiveState archiveState, IFileSystem destinationFileSystem, UPath filePath)
        {
            if (archiveState.Files.Count > 0)
            {
                CreateDirectory(destinationFileSystem, filePath);
            }

            foreach (var afi in archiveState.Files)
            {
                var newFileStream = destinationFileSystem.OpenFile(filePath / afi.FilePath.ToRelative(), FileMode.Create, FileAccess.Write);
                (await afi.GetFileData()).CopyTo(newFileStream);

                newFileStream.Close();
            }
        }