Проверьте, есть ли у ISO расширение Joliet от DiscUtils

Я разрабатываю функцию, чтобы проверить, имеет ли ISO расширение Joliet. Я использую DiscUtils для создания файла ISO следующим образом

CDBuilder builder = new CDBuilder();
builder.UseJoliet = true;
builder.VolumeIdentifier = "A_SAMPLE_DISK";
builder.AddFile("x/x.png", @"C:\Users\Circle\Pictures\Image 1.png");
builder.Build(@"C:\temp\sample.iso");

Однако, когда я читаю файл ISO. Это не будет признано Джолиет

using (FileStream isoStream = File.Open(@"C:\temp\sample.iso", FileMode.Open))
{
    CDReader cd = new CDReader(isoStream, true);
    if (cd.ActiveVariant == Iso9660Variant.Joliet)
    {
        // Never enter here
    }
}

Не уверен, какую часть я сделал не так. Какие-либо предложения?

1 ответ

Вы, кажется, не делаете это неправильно; однако код никогда не установит этот ActiveVariant.

Если вы посмотрите на базовый код, кажется, он переключает ActiveVariant в Iso9660Variant.Iso9660 для веселых расширений для целей этого поля. Я не знаю причину этого - это может быть ошибка, у нее может быть какая-то другая эзотерическая причина сделать это на основе какого-то другого кода в проекте.

Я добавил пару комментариев к коду и воспроизвел его здесь.

case Iso9660Variant.Joliet:
    if (svdPos != 0) // <-- Joliet is always a supplementary table.
    {
        data.Position = svdPos;
        data.Read(buffer, 0, IsoUtilities.SectorSize);
        SupplementaryVolumeDescriptor volDesc = new SupplementaryVolumeDescriptor(buffer, 0);

        Context = new IsoContext { VolumeDescriptor = volDesc, DataStream = _data };
        RootDirectory = new ReaderDirectory(Context,
            new ReaderDirEntry(Context, volDesc.RootDirectory));
        ActiveVariant = Iso9660Variant.Iso9660; // <-- set active variant to base Iso9660
    }

    break;
Другие вопросы по тегам