2017-01-26 23:40:46 +03:00

73 lines
2.4 KiB
Plaintext

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Compression;
using System.ComponentModel;
using System.Collections;
using System.Threading;
using SonicAudioLib;
using SonicAudioLib.Archive;
using SonicAudioLib.IO;
using SonicAudioLib.CriMw;
using System.Xml;
namespace SonicAudioCmd
{
class Program
{
static void Main(string[] args)
{
if (args[0].EndsWith(".cpk"))
{
CriCpkArchive archive = new CriCpkArchive();
archive.Load(args[0]);
//archive.Print();
foreach (CriCpkEntry entry in archive)
{
new Thread(new ThreadStart(delegate
{
using (Stream source = File.OpenRead(args[0]), substream = entry.Open(source))
{
Console.WriteLine("Extracting {0}{1}", entry.DirectoryName, entry.Name);
FileInfo fileInfo = new FileInfo(Path.Combine(Path.GetFileNameWithoutExtension(args[0]), entry.DirectoryName != null ? entry.DirectoryName : "", entry.Name != null ? entry.Name : entry.Id.ToString() + ".bin"));
fileInfo.Directory.Create();
using (Stream destination = fileInfo.Create())
{
substream.CopyTo(destination);
}
fileInfo.LastWriteTime = entry.UpdateDateTime;
}
})).Start();
}
}
else
{
CriCpkArchive archive = new CriCpkArchive();
archive.Align = 16;
archive.Mode = CriCpkMode.Id;
uint id = 0;
foreach (string file in Directory.GetFiles(args[0], "*", SearchOption.AllDirectories))
{
CriCpkEntry entry = new CriCpkEntry();
entry.Id = id;
entry.Name = Path.GetFileName(file);
entry.DirectoryName = Path.GetDirectoryName(file.Replace(args[0] + "\\", ""));
entry.FilePath = new FileInfo(file);
archive.Add(entry);
id++;
}
archive.Save(args[0] + ".cpk");
}
}
}
}