首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用nftw()遍历文件夹时检查级别更改

在使用nftw()遍历文件夹时检查级别更改
EN

Stack Overflow用户
提问于 2018-09-01 20:03:29
回答 1查看 285关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-01 20:46:25

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

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

  • 第一个参数是对象的路径名。
  • 第二个参数是指向stat缓冲区的指针,其中包含有关对象…的信息。
  • 第三个参数是一个整数,提供附加信息。其价值如下:
代码语言:javascript
复制
- `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的一部分。(我在这里也没有看到额外的信息参数-哦,好吧!如果您正在设计回调系统,请考虑提供可以使用的上下文(或“额外信息”)参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52131755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档