Linux c 目录管理—目录简单遍历 opendir、readdir、scandir

Linux c 目录管理:

目录的简单遍历:

opendir函数:

函数原型:
DIR * opendir(const char* path);
打开一个目录,在失败的时候返回NULL(如果path对应的是文件,则返回NULL)

readdir函数:

函数原型:
struct dirent * readdir(DIR * dir_handle);
本函数读取dir_handle目录下的目录项,如果有未读取的目录项,返回目录项,否则返回NULL。
循环读取dir_handle,目录和文件都读
返回dirent结构体指针,dirent结构体成员如下,(文件和目录都读)

struct dirent

  {

  long d_ino;/* inode number 索引节点号 */

  off_t d_off;/* offset to this dirent 在目录文件中的偏移 */

  unsignedshort d_reclen; /* length of this d_name 文件名长 */

  unsignedchar d_type; /* the type of d_name 文件类型 */

  char d_name[NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */

};

closedir函数:

函数原型:
int closedir(DIR * dir_handle);

关闭目录

例子:

#include<stdio.h>

#include<unistd.h>

#include<dirent.h>

#include<stdlib.h>

int main()

{

DIR *d;

Struct dirent *de;

//打开目录

d=opendir(“../dir”);

if(d==NULL)

{

printf(“opendir error:%m”);

exit(-1);

}

//读取目录

while(de=readdir(d))

{

printf(“%s\t%d\n”,de->d_name,de->d_type);

}

//关闭目录

closedir(d);

}

scandir函数:

int scandir(constchar*dirname,//目录名

structdirent***namelist,//返回目录列表

int (*)(structdirent*),//回调函数,过滤目录

//NULL:不过滤

int (*)(structdirent*,struct dirent*)//排序返回目录

//NULL:不排序

);

返回: >=0 目录个数 、=-1 目录查找失败

例子:

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<dirent.h>

int main()

{

structdirent **d;

int r,i,

r=scandir(“/home”,&d,NULL,NULL);

printf(“子目录个数:%d\n”,r);

//遍历子目录

/* for(i=0;i<r;i++)

{

printf(“%s\n”,d[i]->d_name);

}

*/

while(*d)

{

printf(“%s\n”,(*d)->d_name);

d++;

}

}|

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用 PHP 的 opendir()、readdir() 和 closedir() 函数来遍历目录路径。下面是一个示例代码: ```php <?php $dir = "/path/to/directory"; // 打开目录 if (is_dir($dir)){ if ($dh = opendir($dir)){ // 遍历目录中的文件和子目录 while (($file = readdir($dh)) !== false){ // 忽略 . 和 .. 目录 if($file != "." && $file != ".."){ echo "filename: " . $file . "<br>"; } } // 关闭目录 closedir($dh); } } ?> ``` 在上面的示例中,$dir 是要遍历目录路径。首先,使用 is_dir() 函数检查该路径是不是一个目录。如果是目录,则使用 opendir() 函数打开该目录,并使用 readdir() 函数遍历目录中的文件和子目录。在遍历过程中,忽略 . 和 .. 目录。最后,使用 closedir() 函数关闭目录。 ### 回答2: 在PHP中,可以使用`scandir`函数来遍历目录路径。`scandir`函数可以返回指定路径下的所有文件和子目录的名称。 下面是使用`scandir`函数遍历目录路径的示例代码: ``` <?php $path = "目录路径"; // 替换为你要遍历目录路径 // 使用scandir函数获取指定路径下的所有文件和子目录的名称 $files = scandir($path); // 遍历得到的文件和子目录的名称 foreach ($files as $file) { // 排除当前目录(.)和上级目录(..) if ($file == '.' || $file == '..') { continue; } // 根据文件或目录的名称进行相应的操作 $filePath = $path . '/' . $file; if (is_dir($filePath)) { // 如果是目录,可以进行递归遍历或其他操作 echo "目录:$file\n"; } else { // 如果是文件,可以进行相应的操作 echo "文件:$file\n"; } } ?> ``` 在上述代码中,首先通过`scandir`函数获取指定路径下的所有文件和子目录的名称。然后使用`foreach`循环遍历得到的文件和子目录的名称。使用`is_dir`函数判断是文件还是目录,并进行相应的操作。 需要注意的是,在遍历之前排除了当前目录(.)和上级目录(..),因为它们在任何目录中都是固定的。 运行以上代码,你可以替换`目录路径`为你要遍历目录路径,然后执行该代码,就可以输出该目录下的所有文件和子目录的名称。 ### 回答3: 在PHP中,可以使用`opendir()`函数打开一个目录,然后使用`readdir()`函数读取目录中的内容,实现遍历目录的功能。 首先,我们使用`opendir()`函数打开目录,将目录的路径作为参数传入,得到一个目录的句柄,如下所示: ```php $dir = opendir('path/to/directory'); ``` 接下来,我们可以使用`readdir()`函数读取目录中的内容。`readdir()`函数会依次读取目录中的文件和子目录,直到读取完所有内容或者出现错误。每次读取一个内容,可以通过循环来遍历目录中的所有内容,如下所示: ```php while (($file = readdir($dir)) !== false) { // 对每个文件和子目录进行处理 echo $file."<br>"; } ``` 在循环体内,我们可以对每个文件或子目录进行处理,例如打印文件名或执行其他操作。在上面的示例中,我们使用`echo`语句打印每个文件或子目录的名称。 最后,遍历结束后,我们需要关闭目录句柄,以释放资源: ```php closedir($dir); ``` 综上所述,以上代码片段演示了如何使用PHP遍历目录路径。我们首先使用`opendir()`函数打开目录,然后使用`readdir()`函数读取目录中的内容,并对每个文件和子目录进行处理。最后,我们使用`closedir()`函数关闭目录句柄。这样,我们就可以在PHP中实现目录遍历的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值