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); }
/// <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); }
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); }