【问题标题】:Check if ISO has Joliet extension by DiscUtils通过 DiscUtils 检查 ISO 是否具有 Joliet 扩展
【发布时间】:2018-02-24 10:02:00
【问题描述】:

我正在开发一个函数来验证 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
    }
}

不确定我做错了哪一部分。有什么建议吗?

【问题讨论】:

    标签: c# iso iso9660


    【解决方案1】:

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

    如果您look at the underlying code,则似乎将ActiveVariant 切换为Iso9660Variant.Iso9660 以用于该字段的joliet 扩展。我不知道这是什么原因 - 这可能是一个错误,它可能有其他一些深奥的原因,基于项目中的其他代码。

    我在代码中添加了几个 cmets,并在此处重现。

    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;
    

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 2014-10-30
      • 2012-02-11
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 2014-07-23
      相关资源
      最近更新 更多