0

我正在开发一个函数来验证 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 文件时。它不被认为是 Joliet

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
    }
}

不知道我做错了哪一部分。有什么建议么?

4

1 回答 1

1

您似乎没有做错;但是代码永远不会设置那个 ActiveVariant。

如果您查看底层代码,它似乎将 joliet 扩展切换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;
于 2018-02-24T10:42:20.460 回答