static void CreateTOC(string basepath, string tocFile, string[] files)
{
byte[] SHA1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
using (FileStream fs = new FileStream(tocFile, FileMode.Create, FileAccess.Write, FileShare.None, 4096, useAsync: true))
{
fs.Write(BitConverter.GetBytes(0x3AB70C13), 0, 4);
fs.Write(BitConverter.GetBytes(0x0), 0, 4);
fs.Write(BitConverter.GetBytes(0x1), 0, 4);
fs.Write(BitConverter.GetBytes(0x8), 0, 4);
fs.Write(BitConverter.GetBytes(files.Length), 0, 4);
for (int i = 0; i < files.Length; i++)
{
string file = files[i];
if (i == files.Length - 1)//Entry Size
fs.Write(new byte[2], 0, 2);
else
fs.Write(BitConverter.GetBytes((ushort)(0x1D + file.Length)), 0, 2);
fs.Write(BitConverter.GetBytes((ushort)0), 0, 2);//Flags
if (Path.GetFileName(file).ToLower() != "pcconsoletoc.bin")
{
fs.Write(BitConverter.GetBytes((int)(new FileInfo(basepath + file)).Length), 0, 4);//Filesize
}
else
{
fs.Write(BitConverter.GetBytes(0), 0, 4);//Filesize
}
fs.Write(SHA1, 0, 20);
foreach (char c in file)
fs.WriteByte((byte)c);
fs.WriteByte(0);
}
}
}