我试图使用C的nftw()函数递归地迭代一个文件夹,以打印完整的目录结构,同时我无法找到一种方法来检查该级别是否已更改,即它已在目录中移动或仅在目录中迭代。那么,有什么方法可以使用nftw()检查级别的更改吗?
发布于 2018-09-01 20:46:25
如果您阅读了nftw()的POSIX规范,您会发现:
在遇到的每个文件中,
nftw()将使用四个参数调用用户提供的函数fn:
- `FTW_D` — The object is a directory.
- …
FTW结构的指针。base的值是作为第一个参数传递给fn的路径名中对象的文件名的偏移量。level值表示相对于游走根的深度,其中根级别为0。因此,您的问题的答案是FTW对象的level元素告诉您当前项的级别。如果您需要发现更改,则需要以某种方式跟踪上一个级别--它可能是一个文件范围变量。
如果有一个nftw()的变体(称为nftw2()),它为用户提供的“额外信息”参数提供了一个void *,这个void *将被传递给nftw2(),并且nftw2()将中继到被调用的函数,那就太好了。那么您就不需要文件范围变量了。
至少,BSD、macOS和Linux系统可以替代nftw() -- fts(3)函数(也可以在FreeBSD上使用)。macOS手册说,它们可能是POSIX未来版本的一部分,但它们不是2017年POSIX的一部分。(我在这里也没有看到额外的信息参数-哦,好吧!如果您正在设计回调系统,请考虑提供可以使用的上下文(或“额外信息”)参数。
https://stackoverflow.com/questions/52131755
复制相似问题