/// <summary> /// Erstellt aus der angegebenen Binär-Datei eine neue External-File-Struktur. /// </summary> /// <param name="data">Die auszulesende Binär-Datei.</param> /// <returns></returns> /// <remarks></remarks> public static ExternalFile FromBinary(RAMBuffer data) { // An den Anfang springen data.Position = 0; // Der Rückgabewert ExternalFile ret = new ExternalFile(); // Ausnahmen abfangen für ungültige Dateien try { // DRS-Dateiname uint drsNameLen = data.ReadUInteger(); ret.DRSFile = System.Text.Encoding.ASCII.GetString(data.ReadByteArray((int)drsNameLen)); // Datei-ID ret.FileID = data.ReadUInteger(); // Ressourcen-Typ uint resTypeLen = data.ReadUInteger(); ret.ResourceType = System.Text.Encoding.ASCII.GetString(data.ReadByteArray((int)resTypeLen)); // Data uint dataLen = data.ReadUInteger(); ret.Data = data.ReadByteArray((int)dataLen); } catch { // Fehler MessageBox.Show("Fehler: Das Datenobjekt konnte nicht fehlerfrei in ein ExternalFile-Objekt umgewandelt werden!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); } // Fertig return ret; }
/// <summary> /// Gibt eine vollständige Liste aller enthaltenen Dateien zurück; dazu die Dateitypen und IDs. /// </summary> /// <remarks></remarks> public Dictionary<ushort, ExternalFile> GetFullContentList() { // Der Rückgabewert Dictionary<ushort, ExternalFile> ret = new Dictionary<ushort, ExternalFile>(); // Der Name der DRS-Datei string shortName = Path.GetFileNameWithoutExtension(_filename); // Tabellenblöcke einzeln durchlaufen int i = 0; foreach(TableInfo aktTI in _tableInfos) { // Ressourcen-Typ string aktTyp = ReverseString(aktTI.ResourceType); // Tabelle durchlaufen foreach(TableEntry aktE in _tables[i].Entries) { // Dateieigenschaften sammeln ExternalFile aktFile = new ExternalFile(); aktFile.DRSFile = shortName; aktFile.ResourceType = aktTyp; aktFile.FileID = aktE.FileID; aktFile.Data = _files[aktE.FileID]; // Datei hinzufügen ret.Add((ushort)aktE.FileID, aktFile); } // Nächster ++i; } // Fertig return ret; }