Switch-Toolbox/Switch_FileFormatsMain/FileFormats/Hashes/SAHT.cs
2019-04-21 15:55:21 -04:00

66 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Switch_Toolbox.Library.IO;
using Syroot.BinaryData;
using System.IO;
namespace FirstPlugin
{
public class SAHT
{
public string FileName { get; set; }
public SAHT(string fileName) {
FileName = fileName;
Read(new FileReader(fileName));
}
public List<HashEntry> HashEntries = new List<HashEntry>();
private void Read(FileReader reader)
{
reader.ReadSignature(4, "SAHT");
uint FileSize = reader.ReadUInt32();
uint Offset = reader.ReadUInt32();
uint EntryCount = reader.ReadUInt32();
reader.Seek(Offset, System.IO.SeekOrigin.Begin);
for (int i = 0; i <EntryCount; i++)
{
HashEntry entry = new HashEntry();
entry.Read(reader);
reader.Align(16);
HashEntries.Add(entry);
}
ToTextFile();
}
public void ToTextFile()
{
StringWriter writer = new StringWriter();
foreach (var entry in HashEntries)
{
writer.WriteLine($"{entry.Name}={entry.Hash.ToString("x")}");
}
File.WriteAllText(FileName + ".txt", writer.ToString());
}
public class HashEntry
{
public uint Hash { get; set; }
public string Name { get; set; }
public void Read(FileReader reader)
{
Hash = reader.ReadUInt32();
Name = reader.ReadString(BinaryStringFormat.ZeroTerminated);
}
}
}
}