C语言 使用 nftw() 遍历文件夹时检查级别变化



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

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

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

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

  • 第二个参数是指向包含对象信息的统计信息缓冲区的指针...

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

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

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

如果有一个nftw()的变体(称之为nftw2()(,它提供了一个用户提供的"额外信息"参数——一个将传递给nftw2()并且nftw2()中继到被调用函数的void *,那就太好了。 然后,您将不需要文件范围变量。

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

相关内容

最新更新