public void CreateEntrySmallNoPabTest() { using (PakArchive archive = new PakArchive(this.smallNoPabStream)) { archive.CreateEntry(@"test\new\entry.txt"); Assert.AreEqual(4, archive.Entries.Count); Assert.AreEqual(0x1000, archive.Entries[0].FileOffset); Assert.AreEqual(0x13A760, archive.Entries[3].FileOffsetRelative); Assert.AreEqual(0x60, archive.Entries[3].HeaderOffset); PakEntry entry; this.smallNoPabStream.Position = 0x60; entry = PakEntry.ParseHeader( new EndianBinaryReader(EndianBitConverter.Big, this.smallNoPabStream), null); Assert.AreEqual(new QbKey(".txt"), entry.FileType); Assert.AreEqual(0x13A760, entry.FileOffsetRelative); Assert.AreEqual(new QbKey(@"test\new\entry.txt"), entry.FileFullNameKey); this.smallNoPabStream.Position = 0x80; entry = PakEntry.ParseHeader( new EndianBinaryReader(EndianBitConverter.Big, this.smallNoPabStream), null); Assert.AreEqual(new QbKey(".last"), entry.FileType); Assert.AreEqual(0x13A740, entry.FileOffsetRelative); } }
public void CreateEntryLargeWithPabTest() { using (PakArchive archive = new PakArchive(this.largeWithPabPakStream, this.largeWithPabPabStream)) { archive.CreateEntry(@"test\new\entry.txt"); Assert.AreEqual(128, archive.Entries.Count); Assert.AreEqual(0x2000, archive.Entries[0].FileOffset); Assert.AreEqual(0x6DC60, archive.Entries.Last().FileOffsetRelative); Assert.AreEqual(0xFE0, archive.Entries.Last().HeaderOffset); PakEntry entry; this.largeWithPabPakStream.Position = 0xFE0; entry = PakEntry.ParseHeader( new EndianBinaryReader(EndianBitConverter.Big, this.largeWithPabPakStream), null); Assert.AreEqual(new QbKey(".txt"), entry.FileType); Assert.AreEqual(0x6DC60, entry.FileOffsetRelative); Assert.AreEqual(new QbKey(@"test\new\entry.txt"), entry.FileFullNameKey); this.largeWithPabPakStream.Position = 0x1000; entry = PakEntry.ParseHeader( new EndianBinaryReader(EndianBitConverter.Big, this.largeWithPabPakStream), null); Assert.AreEqual(new QbKey(".last"), entry.FileType); Assert.AreEqual(0x6DC40, entry.FileOffsetRelative); Assert.AreEqual(0x2000, this.largeWithPabPakStream.Length); } }
private static void AddEntry(string outputFile, string inputFile, string entryName) { FileStream outputStream = OpenStream(outputFile, FileMode.Append, FileAccess.Write); FileStream inputStream = OpenStream(inputFile, FileMode.Open, FileAccess.Read); DataStream dataStream = new DataStream(outputStream); PakEntry.Serialize(dataStream, inputStream, entryName); inputStream.Dispose(); outputStream.Dispose(); }
public void CreateNewPak(string directory, string targetPath) { var entries = new List <PakEntry>(); foreach (string file in Directory.GetFiles(directory, "*", SearchOption.AllDirectories)) { string[] tokens = file.Split(new string[] { directory + @"\" }, StringSplitOptions.RemoveEmptyEntries); foreach (string token in tokens) { if (!string.IsNullOrWhiteSpace(token)) { string result = token.Replace(@"\", @"/"); var currentEntry = new PakEntry { Name = result, Import = file, UncompressedSize = new FileInfo(file).Length, CompressedSize = new FileInfo(file).Length, CompressionType = 0, EncryptionType = 0, }; entries.Add(currentEntry); } } } Model.CreateNewPakFile(MountPoint, entries, Version); using (var outputFileStream = File.Open(targetPath, FileMode.Create)) { using (var writer = new PakBinaryWriter(outputFileStream)) { long currentSize = 0; long totalSize = Model.Archive.Directory.Entries.Sum(_ => _.UncompressedSize); for (var i = 0; i < Model.Archive.Directory.Entries.Count; i++) { var entry = Model.Archive.Directory.Entries[i]; Model.CreateDataEntry(writer, entry, Padding && i + 1 != Model.Archive.Directory.Entries.Count); CurrentProgress = (int)(currentSize * 100.0 / totalSize); CurrentFile = entry.Name; currentSize += entry.UncompressedSize; } Model.SavePakFileStructure(writer); } } }
public void SetFlagsEmbedNameAlreadyUnsetTest() { PakEntry entry = new PakEntry(null) { FileFullNameKey = new QbKey(@"path\to\test_filename"), FileShortNameKey = new QbKey("test_filename") }; entry.Flags = 0; Assert.AreEqual((PakEntryFlags)0, entry.Flags); Assert.IsNull(entry.EmbeddedFilename); Assert.AreEqual(new QbKey(0), entry.EmbeddedFilenameKey); Assert.AreEqual(new QbKey(@"path\to\test_filename"), entry.FileFullNameKey); Assert.AreEqual(new QbKey("test_filename"), entry.FileShortNameKey); }
public void SetEmbedNameNullTest() { PakEntry entry = new PakEntry(null) { EmbeddedFilename = @"path\to\test_filename", FileShortNameKey = new QbKey("test_filename") }; entry.EmbeddedFilename = null; Assert.AreEqual((PakEntryFlags)0, entry.Flags); Assert.IsNull(entry.EmbeddedFilename); Assert.AreEqual(new QbKey(@"path\to\test_filename"), entry.FileFullNameKey); Assert.AreEqual(new QbKey("test_filename"), entry.FileShortNameKey); Assert.AreEqual(new QbKey(0), entry.EmbeddedFilenameKey); }
public void SetEmbedNameNonNullTest() { PakEntry entry = new PakEntry(null) { FileFullNameKey = new QbKey(@"path\to\test_filename"), FileShortNameKey = new QbKey("test_filename") }; entry.EmbeddedFilename = @"path\to\test_filename_new"; Assert.AreEqual(PakEntryFlags.HasEmbeddedFilename, entry.Flags); Assert.AreEqual(@"path\to\test_filename_new", entry.EmbeddedFilename); Assert.AreEqual(new QbKey(0), entry.FileFullNameKey); Assert.AreEqual(new QbKey("test_filename_new"), entry.FileShortNameKey); Assert.AreEqual(new QbKey(@"path\to\test_filename_new"), entry.EmbeddedFilenameKey); }
public void SetFlagsEmbedNameAlreadySetTest() { PakEntry entry = new PakEntry(null) { EmbeddedFilename = @"path\to\test_filename", FileShortNameKey = new QbKey("test_filename") }; entry.Flags = PakEntryFlags.HasEmbeddedFilename; Assert.AreEqual(PakEntryFlags.HasEmbeddedFilename, entry.Flags); Assert.AreEqual(@"path\to\test_filename", entry.EmbeddedFilename); Assert.AreEqual(new QbKey(0), entry.FileFullNameKey); Assert.AreEqual(new QbKey("test_filename"), entry.FileShortNameKey); Assert.AreEqual(new QbKey(@"path\to\test_filename"), entry.EmbeddedFilenameKey); }
public void ParseHeaderNoEmbeddedNameTest() { PakEntry entry; using (var sample = TestHelpers.OpenSample("PakEntry.NoEmbeddedName.dat")) using (var br = new EndianBinaryReader(EndianBitConverter.Big, sample)) { entry = PakEntry.ParseHeader(br, null); } Assert.AreEqual(new QbKey(0xA7F505C4), entry.FileType); Assert.AreEqual(0x1000, entry.FileOffset); Assert.AreEqual(0xA4, entry.FileLength); Assert.AreEqual(new QbKey(0), entry.EmbeddedFilenameKey); Assert.AreEqual(new QbKey(0x99360D32), entry.FileFullNameKey); Assert.AreEqual(new QbKey(0xF6E6D11A), entry.FileShortNameKey); Assert.AreEqual(0, entry.Unknown); Assert.AreEqual((PakEntryFlags)0, entry.Flags); Assert.IsNull(entry.EmbeddedFilename); }
public void CreateEntryLargeNoPabTest() { using (PakArchive archive = new PakArchive(this.largeNoPabStream)) { archive.CreateEntry(@"test\new\entry.txt"); Assert.AreEqual(128, archive.Entries.Count); Assert.AreEqual(0x2000, archive.Entries[0].FileOffset); Assert.AreEqual(0x6DC60, archive.Entries.Last().FileOffsetRelative); Assert.AreEqual(0xFE0, archive.Entries.Last().HeaderOffset); PakEntry entry; this.largeNoPabStream.Position = 0xFE0; entry = PakEntry.ParseHeader( new EndianBinaryReader(EndianBitConverter.Big, this.largeNoPabStream), null); Assert.AreEqual(new QbKey(".txt"), entry.FileType); Assert.AreEqual(0x6DC60, entry.FileOffsetRelative); Assert.AreEqual(new QbKey(@"test\new\entry.txt"), entry.FileFullNameKey); this.largeNoPabStream.Position = 0x1000; entry = PakEntry.ParseHeader( new EndianBinaryReader(EndianBitConverter.Big, this.largeNoPabStream), null); Assert.AreEqual(new QbKey(".last"), entry.FileType); Assert.AreEqual(0x6DC40, entry.FileOffsetRelative); this.largeNoPabStream.Position = 0x2000; var bytes = new byte[0x20]; var expected = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x1C, 0x08, 0x02, 0x04, 0x10, 0x04, 0x08, 0x0C, 0x0C, 0x08, 0x02, 0x04, 0x14, 0x02, 0x04, 0x0C, 0x10, 0x10, 0x0C, 0x00, 0x00, 0x20, 0x07, 0x00 }; this.largeNoPabStream.Read(bytes, 0, 0x20); Assert.AreEqual(expected, bytes); } }
private static void CreatePackage(string inputFile, string outputFile) { FileStream outputStream = OpenStream(outputFile, FileMode.Create, FileAccess.Write); DataStream dataStream = new DataStream(outputStream); if (!inputFile.EndsWith("\\")) { inputFile += "\\"; } foreach (string file in Directory.GetFiles(inputFile, "*", SearchOption.AllDirectories)) { string entryName = file.Substring(inputFile.Length); FileStream inputStream = OpenStream(file, FileMode.Open, FileAccess.Read); PakEntry.Serialize(dataStream, inputStream, entryName); inputStream.Dispose(); } outputStream.Dispose(); }