static void Main(string[] args) { var path = args[0]; var output = args[1]; if (!output.EndsWith("/") && !output.EndsWith("\\")) { output += "/"; } using var archive = new TroikaArchive(path); // Precreate all directories var entries = archive.Entries.ToArray(); foreach (var entry in entries) { if (entry.IsDirectory) { var fullPath = output + archive.GetFullPath(in entry); Directory.CreateDirectory(fullPath); } } Parallel.ForEach( entries.Where(entry => !entry.IsDirectory), entry => { var fullPath = output + archive.GetFullPath(in entry); using var data = archive.ReadFile(in entry); File.WriteAllBytes(fullPath, data.Memory.ToArray()); }
public void CanListAndReadFileInSubfolder() { using var archive = new TroikaArchive(TestData.GetPath("Core/IO/TroikaArchives/test.dat")); archive.FileExists("subfolder/test.txt").Should().BeTrue(); archive.ListDirectory("subfolder").Should().BeEquivalentTo("TEST.txt"); ReadAscii(archive, "subfolder/test.txt").Should().Be("random test data in subfolder"); }
public void CanReadArchive() { using var archive = new TroikaArchive(TestData.GetPath("Core/IO/TroikaArchives/test.dat")); archive.Entries.ToArray().Select(e => archive.GetFullPath(e)).Should().BeEquivalentTo( "root_test.txt", "subfolder", "subfolder/TEST.txt" ); archive.ArchiveGuid.Should().Be(Guid.Parse("411d678d-c5ac-5f61-543a-64d531544144")); }
public void CanDeleteFileInSubfolder(string pathToDelete) { using var archive = new TroikaArchive(TestData.GetPath("Core/IO/TroikaArchives/test.dat")); // Now mark the file as deleted archive.SetDeleted(pathToDelete); archive.FileExists("subfolder/TEST.txt").Should().BeFalse(); archive.ListDirectory("subfolder").Should().BeEmpty(); ReadAscii(archive, "subfolder/TEST.txt").Should().BeNull(); }
private static string ReadAscii(TroikaArchive archive, string path) { using var memory = archive.ReadFile(path); return(memory != null?Encoding.ASCII.GetString(memory.Memory.Span) : null); }
public void FindEntryInEmptyArchiveWorks() { using var archive = new TroikaArchive(TestData.GetPath("Core/IO/TroikaArchives/empty.dat")); archive.FileExists("art/some-file.txt").Should().BeFalse(); archive.DirectoryExists("art/some-dir").Should().BeFalse(); }
public void CanReadEmptyArchive() { using var archive = new TroikaArchive(TestData.GetPath("Core/IO/TroikaArchives/empty.dat")); archive.Entries.Length.Should().Be(0); }