- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个关于在 scandir
函数中排序的基本问题。到目前为止,我阅读了 POSIX readdir
的手册页,但没有找到有关订购保证的具体信息。
但是当我遍历大目录(无法更改,只读)时,我在多个系统(Fedora 24 和 Ubuntu 16.04)上观察到相同的结果。
这种行为的原因是什么?我在哪里可以阅读更多相关信息?
如果我需要连续排序,我是否应该围绕 POSIX 编写自己的包装器 scandir或者有人知道 python 的现有实现?
最佳答案
readdir
的手册页是明确的:
The order in which filenames are read by successive calls to readdir() depends on the filesystem implementation; it is unlikely that the names will be sorted in any fashion.
在大多数实现中,目录是顺序列表条目,readdir
和 scandir
都遵循基本顺序。如果您在不同的 Linux 版本上使用类似的文件系统,并以相同的顺序填充目录,则 readdir
可能也会给出相同的顺序。如果您不添加、删除或重命名任何文件(至少在文件系统稳定,因为有些文件系统可能会延迟某些操作),该顺序不是随机的并且是绝对确定的和可重复的。只是不能从文件名预测。
因此,如果您想要一致的顺序,则必须自己处理顺序。
关于Python scandir() 排序\POSIX readdir 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41258051/
DIR *dir_ptr; struct dirent *dir_entery; dir_ptr = opendir("/tmp"); while (dir_ptr&&(dir_entery = re
我惊讶地发现手册页中包含 readdir 的两个冲突变体的条目。 在 READDIR(2) 中,它特别指出你不想使用它: This is not the function you are intere
我在 Julia 1.7 的 readdir 上使用 isdir 过滤器时遇到了一些问题。运行以下命令: println(readdir("data/")) println(isdir("data/S
我有一个当前正在使用 while 循环处理的目录。文件名实际上是这样的日期: updates.20130831.1445.hr updates.20140831.1445.hr updates.201
int indent = 0; int listDir(const char* dirname){ DIR* dir; struct dirent* d; if(!(dir =
我使用以下代码循环遍历目录以打印出文件的名称。但是,并未显示所有文件。我尝试过使用 clearstatcache 但没有效果。 $str = ''; $ignore = array('
我使用以下代码循环遍历目录以打印出文件的名称。但是,并未显示所有文件。我尝试过使用 clearstatcache 但没有效果。 $str = ''; $ignore = array('
到目前为止,我知道在 Perl 中打开和读取目录的两种方法。您可以使用 opendir、readdir 和 closedir 或者您可以简单地使用 glob 来获取目录的内容。 示例: 使用 op
我正在编写一个点文件存储库管理器,但删除存储库的命令不起作用。它转到存储库文件夹,然后它必须列出所有文件和目录,以便我能够删除它们。问题是,它列出了我需要删除的每个文件或目录,但它排除了非空的 .gi
使用server and client代码。我尝试添加通过 readdir() 实现的 ls 功能 我的 *connection_handler 看起来像这样: void *connection_ha
我有一个使用 readdir() 的函数。我使用 stat() 来获取有关我作为参数提供的目录中的文件的信息。 folder_name[] is actually the absolute path
这个问题已经有答案了: Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized point
嗨,我正在尝试编写一个使用 readdir 的程序,但我读取的条目未按排序顺序。我还应该寻找什么。 最佳答案 尝试scandir,它可以一次读取整个目录并为您对名称进行排序。 关于c - readdi
在 main 中,我使用 deletefolder() 调用以下函数: void deletefolder(){ struct dirent *next_file; DIR *folder
我有一段相当简单的代码来获取 C++ 目录中的文件列表。令人费解的是,目录中的 135 个文件中只有 68 个最终存储在 vector 文件名中。发生了什么事? DIR* pDIR = opendir
我正在尝试读取和处理目录中的所有文件。 如果只使用 readdir() 并计算目录中的文件数,一切都很好。但是,如果我复制文件名 strcpy() 并传递给不同的函数,readdir() 会在读取 4
所以我循环调用 readdir() 函数并将生成的文件名添加到链表中的新节点。通过设置 file_list = add_file_node() 解决问题后,我遇到了 dir_list 循环在访问目录时
我写了一个简单的图片库脚本女巫检查文件夹并显示文件夹中的所有图像我有代码删除 .和 .. 但它不起作用,我不明白为什么任何帮助都会很棒,因为我是 PHP 中 dir 函数的新手。我在链接周围有灯箱标签
这个问题在这里已经有了答案: List regular files only (without directory) problem (2 个答案) 关闭 10 年前。 我的目标是计算目录中的文件数
这是我希望打印的 Perl 脚本 found执行时: #!/usr/bin/perl use warnings; use strict; use utf8; use Encode; use const
我是一名优秀的程序员,十分优秀!