2

我想为目录和文件使用结构和 std::vector 在内存中创建 CD 内容树。我不会详细扫描文件,我只对目录或常规文件感兴趣。

最好和最快的方法是什么?递归扫描会使 CD 单元的磁头在驱动器周围跳来跳去寻找文件/文件夹吗?

我想减少 CD 单元的头部跳跃并使其尽可能快。顺便说一句:我正在使用 UNIX 和 C/C++。

4

1 回答 1

3

根据 ISO 9660 规范:

包含在主卷描述符中的是描述连续根目录位置的根目录记录。(与在 UNIX 中一样,目录显示为操作系统的特殊用途的文件)。目录条目依次存储在该区域内。ISO 9660 文件名的评估在此位置开始。根目录存储为一个范围或一系列连续扇区,其中包含出现在根目录中的每个目录条目

鉴于这些信息,我认为头部跳跃是相当不可避免的。您将从这个顶级目录开始,比如 Track X Sector Y,扫描以找到要遍历的第一个目录,然后在磁盘上向下移动。因此,无论您如何“潜水”,只要您进一步潜入树中,头部就会跳动。如果有一种方法可以根据磁道然后在扇区上扫描磁盘,那将带来好处,但我不确定如何做到这一点,以及它是否值得实施。

您的决定对 CDFS 性能的影响并不大,而是您的进程开销。递归会产生分配给堆栈的开销,并且那里存在内存影响。但就 CDFS 而言,它似乎不受您的控制。

我会说递归,因为它对树遍历具有逻辑意义

于 2013-02-22T16:46:50.710 回答