问题标签 [dirent.h]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1891 浏览

c - 无法在 C 中使用 qsort 对 dirent 进行排序

我在 C 中对 dirent 结构进行排序时遇到问题。我已经尝试了所有方法,但无法让我的结构数组的值出现在我的比较中。我的代码如下所示:

我创建了一个简单的函数 sizeCompare 来显示我的函数正在工作,但我得到了空值。我的功能如下:

有人可以向我解释为什么我的 sizeCompare 没有正确检索数组值吗?

更新: 我尝试过使用 qsort 中的大小,结果我的值不再为空。以下行给了我一个输出:

显然 1000 不是一个好的解决方案。有人知道这样的数组的正确大小吗?

更新 2: sizeCompare 函数只接受第一个参数,第二个为空。

0 投票
3 回答
221 浏览

c - minix 3.1 中的搜索功能

我一直在尝试在 minix 中实现一个搜索功能,它将在当前或子目录中查找文件并打印路径。到目前为止,我的代码编译成功,但由于某种原因它只返回几个奇怪的 ascii 字符,知道我做错了什么吗?

所以我首先检查文件是否在当前目录中,然后再进入子文件夹,这就是我打开和关闭目录两次的原因。我唯一怀疑可能是非正统的事情是直接使用 malloc 并声明一个固定的数量,这是不可以吗?感谢您的帮助<3

编辑:所以我尝试使用 malloc 与字符串的大小而不是设置的数量但没有改变,这是一个截图:

在此处输入图像描述

EDIT2:由于建议更新了我的代码,但仍然无法 100% 工作,因为它正在使用父文件夹或类似的奇怪东西,如果我设法让它完美工作,将发布解决方案(y)

EDIT3:我已经设法让它工作(在某种程度上)它可以完美地工作,但在某些情况下它找不到现有文件,不知道原因并且太累了,无法确定为什么^_^这里是对于将来会寻找类似解决方案的任何其他人的最终工作代码:

由于某种原因,文件名是在 argv 1而不是 argv[0] 中传递的,这很奇怪,因为我实现了另一个通过 argv[0] 传递文件名的函数... Minix¯| (ツ)

0 投票
2 回答
1641 浏览

c - lstat:无法访问另一个目录中的文件

我正在尝试编写类似 ls 的程序,该程序会产生ls -l带有权限、所有者、时间和文件名称的输出。如果我通过.(或什么都不通过),它会很好用,所以它适用于当前目录。但是,如果我将任何其他目录传入或传出当前目录,则perror表示它“无法访问”这些文件。

请帮我弄清楚是什么阻止lstat了访问另一个目录中的文件。

我使用 gcc 和一个文本编辑器,没有 IDE,开始学习使用 gdb(尝试调试但没有找到可以指出我应该寻找哪种解决方案的东西)。这就是为什么我决定把所有代码放在这里,这样任何人都可以运行它。也许我传递了错误的论点,也许是某种lstat错误的行为,我不知道。我一直试图在网上找到一些关于它的东西,但没有结果。

这是我到目前为止所做的:

正常工作时输出(仅适用于当前目录):

失败时输出:

更新:使用我添加到的建议解决方案get_info

所以输出现在产生的文件名与 完全一样ls -l,而不是它们的完整路径。

0 投票
3 回答
967 浏览

c - C readdir & struct dirent 分配

readdir返回一个指向 a 的指针struct dirent,我已经测试了存储在两个不同指针中的两个调用是否readdir修改了第一个指针内容,它没有。

所以我猜 readdir 分配了一些内存,对吗?

如果是这样,它应该被释放,这是我以前从未做过的事情......

0 投票
4 回答
194 浏览

c++ - 如何将 char 复制到 char* 向量中

我正在使用 dirent 从特定文件夹中读取文件名,并且我想将名称保存在 char* 向量中。它似乎是在复制一些奇怪的符号而不是复制文件名。这是我到目前为止所尝试的:

谁能告诉我为什么它不复制文件名,我该怎么做才能复制它们?

编辑: d_name 是一个 char 变量,声明为:

似乎在我的程序中 PATH_MAX 等于 260。

PS:我是第一次使用dirent,所以不是很熟悉。

0 投票
1 回答
5476 浏览

c - struct dirent 在头文件中没有 de_type

所以我有一个项目,我需要构建一个小的简单文本外壳,它可以运行、编辑和读取目录中的文件。我有一个应该可以工作的小原型,除非我在编译时收到关于在 dirent.h 头文件中使用的 struct dirent 中找不到 d_type 的错误。

变量“de”是 struct dirent* 类型,正在检查它的类型,我收到错误:“struct dirent”没有名为“de_type”的成员

这就是我真正感到困惑和困惑的地方:我已经在 Windows(使用 dev C++)和 Ubuntu(使用 gcc)上编译了这段代码。我在两个操作系统上都收到了相同的错误,当我检查使用的库时,我相信这是普通的 gnu C 库,那里有一个名为 d_type 的变量:

https://www.gnu.org/software/libc/manual/html_node/Directory-Entries.html

我发现了对 dirent.h 文件的其他引用,这不是因为一个文件在不同的库中,如果是这种情况,我该如何加载该库以便编译代码?

对不起,很长的帖子,非常感谢所有回答的人!

0 投票
3 回答
1299 浏览

c - C程序打印目录中的目录名称并排除当前目录和父目录

我有一个程序可以打印出特定目录中列出的所有目录,方法是检查d_type == DT_DIR

该程序工作,但也打印出父目录..和当前目录.

我试图设置一个 if 语句来检查它d_name != ".." or ".",但它仍然打印父目录和当前目录

这是我添加了 if 语句的代码

不幸的是,这是输出,其中dir2是adirectory中的一个目录

我想要一个只显示没有点或两个点的目录的输出

0 投票
1 回答
539 浏览

c++11 - d_name 与生成核心转储的 cstring 比较

我在 C++ 中使用 dirent.h 以获取我的目录中的可用目录和文件,除了可用目录和文件之外,它还列出了一个“。” 和“..”为了删除它们,我在打印之前添加了一个 if 语句。代码如下:

它没有给我编译错误,但在执行时给我“双重免费或损坏(顶部):0x00000000016d3010 *** 中止(核心转储)”我该如何解决?

0 投票
1 回答
764 浏览

c - 在 gdb 中显示意外值的 dirent d_name 字符串

我正在对一个在基于 POSIX 的操作系统上遍历文件系统的程序进行单元测试,我无法找到一种方法来使用 NFTW 在没有一堆全局变量的情况下遍历它,所以我正在使用 dirent.h readdir( ) 的解决方案。为了测试递归的逻辑,我创建了这个函数,它向下递归一个目录,但以递归到第二个目录的段错误结束。

我用 gdb 对其进行了测试,发现手册页描述为当前文件名的空终止字符串的 d_name 变量填充了看起来像文件名的整个目录流与一堆空值和其他转义符混合的内容。我在下面发布一个示例。我是否误解了 d_name 变量的含义?

.gtkrc-2.0\000\000\bL\f@\000\000\000\000\000\303e0x\261\233-\a \000\b.kshrc\000\000\000\000\000\000\b)\000@\000\000\000\000\000Wa\340\315\366\310y\a\030\000\004src\000\004\037\000@\000\000\000\000\000\030\313\060\232\256\024\245\a \000\004Downloads\000\000\000\004\237\n@\000\000\000\000\000>5\321{\266-\004\t \000\004."...}

0 投票
1 回答
1200 浏览

c++ - 打印当前目录c++的内容

我正在尝试模拟 ls 命令的行为。

我使用 dirent.h 库创建了一个简单的代码

我的当前目录包含两个文件 Screen.cpp 和 a.out。我希望此代码按顺序打印,例如ls -la命令

但是这段代码输出它就像

有没有什么简单的方法可以在不存储/排序某个容器中的列表的情况下实现这一点?