using System; using System.IO; using Aaru.CommonTypes.Enums; namespace Aaru.Archives; public sealed partial class Arc { #region IArchive Members /// public ErrorNumber GetFilename(int entryNumber, out string fileName) { fileName = null; if(!Opened) return ErrorNumber.NotOpened; if(entryNumber < 0 || entryNumber >= _entries.Count) return ErrorNumber.OutOfRange; fileName = _entries[entryNumber].Filename; return ErrorNumber.NoError; } /// public ErrorNumber GetEntryNumber(string fileName, bool caseInsensitiveMatch, out int entryNumber) { entryNumber = -1; if(!Opened) return ErrorNumber.NotOpened; if(entryNumber < 0 || entryNumber >= _entries.Count) return ErrorNumber.OutOfRange; StringComparison comparison = caseInsensitiveMatch ? StringComparison.CurrentCultureIgnoreCase : StringComparison.CurrentCulture; for(int i = 0, count = _entries.Count; i < count; i++) { if(!_entries[i].Filename.Equals(fileName, comparison)) continue; entryNumber = i; return ErrorNumber.NoError; } return ErrorNumber.NoSuchFile; } /// public ErrorNumber GetCompressedSize(int entryNumber, out long length) { length = -1; if(!Opened) return ErrorNumber.NotOpened; if(entryNumber < 0 || entryNumber >= _entries.Count) return ErrorNumber.OutOfRange; length = _entries[entryNumber].Compressed; return ErrorNumber.NoError; } /// public ErrorNumber GetUncompressedSize(int entryNumber, out long length) { length = -1; if(!Opened) return ErrorNumber.NotOpened; if(entryNumber < 0 || entryNumber >= _entries.Count) return ErrorNumber.OutOfRange; length = _entries[entryNumber].Uncompressed; return ErrorNumber.NoError; } /// public ErrorNumber GetAttributes(int entryNumber, out FileAttributes attributes) { // DOS version of ZOO ignores the attributes, so we just say it's a file attributes = FileAttributes.None; if(!Opened) return ErrorNumber.NotOpened; if(entryNumber < 0 || entryNumber >= _entries.Count) return ErrorNumber.OutOfRange; attributes = _entries[entryNumber].Attributes; return ErrorNumber.NoError; } #endregion }