根据iso9660 / ecma119结构的规范,路径表包含每个路径的记录,包括起始扇区的位置和名称,但不包含其大小。我可以找到目录条目,但不知道它包含多少扇区(通常是2048字节)。是一个吗?二?六?
如果我“遍历目录树”,每个目录条目都包含引用的位置和大小,这样我就可以知道读取的字节数(基本上是多少扇区,因为目录必须使用整个扇区)。但是,path表只包含起始位置,而不包括大小,这使我不知道要读取多少字节。
在一个示例中,主要卷描述符中的根目录条目(ubuntu-18.04.1-live-server-amd64.iso fwiw)显示:
Root Directory:
Directory Record Length: 34
Extended Attribute Length: 0
Location of Extent: 20 $00000014 00:00:20
Data Length: 2048 $00000800
Recording Date and Time: 23:39:04 07/25/2018 GMT 0
File Flags: $02 visible regular dir non-record no-perms single-extent
File Unit Size: 0
Interleave Gap Size: 0
Volume Sequence Number: 1
File Identifier: . (current directory)因为它说Data Length是2048,所以我只知道读一个扇区。
但是,path表中的根目录条目显示:
Path Record Length: 10 $0A
Extended Attribute Length: 0 $00
Location of Extent: 20 $00000014 00:00:20
Parent Directory Number: 1 $0001
File Identifier: . (current directory)它还指向扇区20,但没有告诉我它使用了多少扇区,这让我猜测。
是的,扇区中未使用的字节应该都是0x00,所以如果我在扇区中读取记录,读取记录,然后找到第一个字节(长度)为0x00的字节,那么我知道我已经到达记录的末尾,但这有三个问题:
基本上,我知道如何读取有序路径表以获取目录条目,但不知道如何使用该表来了解要为目录本身读取多少扇区。理论上,我可以读取父目录以获取该目录的条目,以了解其大小,但这会增加一个查找和读取,并且很大程度上违背了path表的目的。
发布于 2018-09-27 11:10:33
啊,我想出来了。因为目录条目总是以目录本身的目录条目开头,而数据长度总是以字节10-17 (小端点为10-13,大端点为13-17 )开始,所以您可以从扇区的开头读取字节10-17并获得大小。仍然没有把它放在path表本身那么有效--不知道为什么没有--但是它起作用了。
https://stackoverflow.com/questions/52525272
复制相似问题