Пример #1
0
    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);
 }