我正在开发一个函数来验证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文件时。它不被认为是乔利埃特p>
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
}
}
不确定哪个部分我做错了。有什么建议吗?
答案 0 :(得分:1)
你似乎做错了;但是代码不会设置ActiveVariant。
如果您look at the underlying code,则出于该字段的目的,似乎将ActiveVariant
切换为Iso9660Variant.Iso9660
以获取joliet扩展名。我不知道原因 - 它可能是一个错误,它可能有一些其他深奥的理由,根据项目中的其他代码来做这件事。
我在代码中添加了一些注释,并在此处重现。
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;