예제 #1
0
 public bool TryGetFolder(string path, [MaybeNullWhen(false)] out IArchiveFolder folder)
 {
     folder = new Ba2FolderWrapper(
         path,
         Files.Where(f => f.Path.ToString().StartsWith(path, StringComparison.OrdinalIgnoreCase)));
     return(folder.Files.Count > 0);
 }
예제 #2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="archivePath">Fully qualified file name for archive file</param>
        /// <param name="abstractFactory">Factory to create tokenizers, readers etc.</param>
        public ArchiveReader(string archivePath, IAbstractFactory abstractFactory)
        {
            this.abstractFactory = abstractFactory ??
                                   throw new ArgumentNullException(nameof(abstractFactory));
            FileAttributes fileAttributes = File.GetAttributes(archivePath);

            if ((fileAttributes & FileAttributes.Directory) == FileAttributes.Directory)
            {
                //File is a directory.  Set the outputPath and continue
                OutputPath = string.IsNullOrWhiteSpace(archivePath) ?
                             throw new ArgumentNullException(nameof(archivePath)) : archivePath;
            }
            else
            {
                //File is an archive file.  Extract to temp directory
                archiveFolder = abstractFactory.CreateArchiveFolder(archivePath);
                OutputPath    = archiveFolder.Extract();
            }
            FileName       = archivePath;
            metaDataReader = abstractFactory.CreateMetaDataReader();
            MetaData       = metaDataReader.ReadMetaData(OutputPath);
            //Create a core file reader
            var coreFileMetaData = abstractFactory.CreateCoreMetaData(MetaData.Core);

            coreFile = CreateFileReader(coreFileMetaData);
            //Create file readers for extensions
            foreach (var extension in MetaData.Extension)
            {
                var extensionFileName     = extension.Files.FirstOrDefault();
                var extensionFileMetaData = abstractFactory.CreateExtensionMetaData(extension);
                extensionFiles.Add(CreateFileReader(extensionFileMetaData));
            }
            Extensions = new FileReaderCollection(extensionFiles);
        }
예제 #3
0
 public bool TryGetFolder(string path, [MaybeNullWhen(false)] out IArchiveFolder folder)
 {
     if (!HasFolderNames ||
         !_foldersByName.Value.TryGetValue(path, out var folderRec))
     {
         folder = default;
         return(false);
     }
     folder = folderRec;
     return(true);
 }