53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
|
using System;
|
|||
|
using System.IO;
|
|||
|
using System.IO.Compression;
|
|||
|
|
|||
|
namespace Global_City_Extractor
|
|||
|
{
|
|||
|
class Program
|
|||
|
{
|
|||
|
static void Main(string[] args)
|
|||
|
{
|
|||
|
BinaryReader br = new(File.OpenRead(args[0]));
|
|||
|
|
|||
|
if (new string(br.ReadChars(3)) != "NxP")
|
|||
|
throw new Exception("This is not a nxp file.");
|
|||
|
|
|||
|
br.BaseStream.Position = 8;
|
|||
|
int n = 0;
|
|||
|
string path = Path.GetDirectoryName(args[0]) + "\\" + Path.GetFileNameWithoutExtension(args[0]);
|
|||
|
Directory.CreateDirectory(path);
|
|||
|
while (br.BaseStream.Position < br.BaseStream.Length)
|
|||
|
{
|
|||
|
int nameStart = (int)(br.BaseStream.Position + br.ReadByte());
|
|||
|
byte nameSize = br.ReadByte();
|
|||
|
int start = br.ReadInt32();
|
|||
|
int size = br.ReadInt32() - 4;
|
|||
|
int isCompressed = br.ReadInt32();//6
|
|||
|
if (br.BaseStream.Position != nameStart)
|
|||
|
throw new Exception("Fuck!");
|
|||
|
|
|||
|
string name = new(br.ReadChars(nameSize));
|
|||
|
br.ReadInt32();
|
|||
|
|
|||
|
FileStream fs = File.Create(path + "\\" + n);
|
|||
|
if (isCompressed == 6)
|
|||
|
{
|
|||
|
br.ReadInt16();
|
|||
|
using (var ds = new DeflateStream(new MemoryStream(br.ReadBytes(size - 2)), CompressionMode.Decompress))
|
|||
|
ds.CopyTo(fs);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
BinaryWriter bw = new(fs);
|
|||
|
bw.Write(br.ReadBytes(size));
|
|||
|
bw.Close();
|
|||
|
}
|
|||
|
|
|||
|
fs.Close();
|
|||
|
n++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|