0

我正在尝试使用 C 的 nftw() 函数递归迭代文件夹以打印完整的目录结构,但我找不到检查级别是否已更改的方法,即它已移动到目录中还是仅在目录中迭代。那么,有什么方法可以使用 nftw() 检查级别的变化吗?

4

1 回答 1

2

如果您阅读 POSIX 规范nftw(),您会发现:

在它遇到的每个文件中,应使用四个参数nftw()调用用户提供的函数:fn

  • 第一个参数是对象的路径名。

  • 第二个参数是指向包含对象信息的 stat 缓冲区的指针……</p>

  • 第三个参数是一个提供附加信息的整数。其值为以下之一:

    • FTW_D— 对象是一个目录。
    • …</li>
  • 第四个参数是指向FTW结构的指针。的值base是作为第一个参数传递给的路径名中对象文件名的偏移量fn。的值level表示相对于步行根的深度,其中根级别为 0。

所以,你的问题的答案是levelFTW 对象的元素告诉你当前项目的级别。如果您需要发现更改,则需要以某种方式跟踪上一个级别——它可能是一个文件范围变量。

nftw()如果(call it nftw2()) 有一个变体来提供用户提供的“额外信息”参数,那就太好了——avoid *将被传递给nftw2()nftw2()中继到被调用的函数。那么你就不需要文件范围变量了。

至少,BSD、macOS 和 Linux 系统具有替代nftw()功能fts(3)(也在FreeBSD中)。macOS 手册说它们可能是 POSIX 未来版本的一部分,但它们不是 POSIX 2017 的一部分。(我在这里也没有看到额外的信息参数——哦,好吧!如果你正在设计回调系统,请考虑提供可以使用的上下文(或“额外信息”)参数。)

于 2018-09-01T20:46:25.423 回答