/// <summary> /// Opens an archive for file reading. /// </summary> /// <remarks> /// The archives are created using class factories within /// extension libraries. /// </remarks> /// <param name="filename">The filename that will be opened</param> /// <param name="archiveType">The library that contains the data-handling code</param> /// <returns> /// If the function succeeds, a valid pointer to an Archive object is returned. /// <para/> /// If the function fails, an exception is thrown. /// </returns> public Archive Load(string filename, string archiveType) { Archive arch = null; if (!_archives.TryGetValue(filename, out arch)) { // Search factories ArchiveFactory fac = null; if (!_factories.TryGetValue(archiveType, out fac)) { throw ExceptionFactory.CreateFatalException("Cannot find an archive factory to deal with archive of type {0}", archiveType); } arch = fac.CreateInstance(filename); arch.Load(); _archives.Add(filename, arch); } return(arch); }