private void procPart(BakedVolumes_PartValues p, bool salvageSkip, string part, int parn)
    {
        var file = Path.Combine(p.Path, p.Name);

        Console.WriteLine($"[Open Baked Volume: {file}]");

        ulong offset = 0;

        var io  = new BinaryReader(File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read));
        var ios = io.BaseStream;

        var buffer = new byte[512];

        while (true)
        {
            var r = ios.Read(buffer, 0, buffer.Length);
            if (r < 512)
            {
                Console.WriteLine("[EOF]");
                return;
            }

            offset    += 512;
            RunOffset += 512;

            if (SkipBlocks > 0)
            {
                SkipBlocks--;
                continue;
            }

            var header = new TarHeader(buffer, parn, offset, RunOffset);
            if (!header.Valid)
            {
                continue;
            }
            var size = header.Size;

            SkipBlocks = size / 512;
            if (size % 512 != 0)
            {
                SkipBlocks++;
            }

            //Console.WriteLine($"Header: {header.ToString()}");
            //Console.WriteLine($"Skip: {SkipBlocks}\n");

            checkFile(header, part, offset - 512, RunOffset - 512, SkipBlocks);
        }
    }
    private bool checkPart(BakedVolumes_PartValues p)
    {
        var file = Path.Combine(p.Path, p.Name);

        return(File.Exists(file));
    }