gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:35 28 4
gpt4 key购买 nike

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

最佳答案

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

At each file it encounters, nftw() shall call the user-supplied function fn with four arguments:

  • The first argument is the pathname of the object.

  • The second argument is a pointer to the stat buffer containing information on the object…

  • The third argument is an integer giving additional information. Its value is one of the following:

    • FTW_D — The object is a directory.
  • The fourth argument is a pointer to an FTW structure. The value of base is the offset of the object's filename in the pathname passed as the first argument to fn. The value of level indicates depth relative to the root of the walk, where the root level is 0.

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

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

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

关于使用 nftw() 遍历文件夹时检查级别变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131755/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com