当前位置:首页 » 操作系统 » linuxc遍历文件

linuxc遍历文件

发布时间: 2022-07-10 02:33:04

linux下C语言怎么统计某个目录下的文件个数

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>

#define MAX 1024

int get_file_count(char *root)
{
DIR *dir;
struct dirent * ptr;
int total = 0;
char path[MAX];
dir = opendir(root); /* 打开目录*/
if(dir == NULL)
{
perror("fail to open dir");
exit(1);
}

errno = 0;
while((ptr = readdir(dir)) != NULL)
{
//顺序读取每一个目录项;
//跳过“..”和“.”两个目录
if(strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0)
{
continue;
}
//printf("%s%s/n",root,ptr->d_name);
//如果是目录,则递归调用 get_file_count函数

if(ptr->d_type == DT_DIR)
{
sprintf(path,"%s%s/",root,ptr->d_name);
//printf("%s/n",path);
total += get_file_count(path);
}

if(ptr->d_type == DT_REG)
{
total++;
printf("%s%s/n",root,ptr->d_name);
}
}
if(errno != 0)
{
printf("fail to read dir"); //失败则输出提示信息
exit(1);
}
closedir(dir);
return total;
}

int main(int argc, char * argv[])
{
int total;
if(argc != 2)
{
printf("wrong usage/n");
exit(1);
}
total = get_file_count(argv[1]);
printf("%s ha %d files/n",argv[1],total);
return 0;
}

㈡ Linux中针对文件夹下的所有文件隔断时间,看看哪些文件或者文件夹有改动

应该可以遍历指定目录下的所有子目录和文件,然后查看修改时间。
不太清除LINUX下如果文件修改后是否会有事件通知,windows下是有的。

㈢ linux C 中的文件夹遍历dirent d_type表明该文件的类型 跪求~~~

enum

{

DT_UNKNOWN = 0,

# define DT_UNKNOWN DT_UNKNOWN

DT_FIFO = 1,

# define DT_FIFO DT_FIFO

DT_CHR = 2,

# define DT_CHR DT_CHR

DT_DIR = 4,

# define DT_DIR DT_DIR

DT_BLK = 6,

# define DT_BLK DT_BLK

DT_REG = 8,

# define DT_REG DT_REG

DT_LNK = 10,

# define DT_LNK DT_LNK

DT_SOCK = 12,

# define DT_SOCK DT_SOCK

DT_WHT = 14

# define DT_WHT DT_WHT

};

这是d_type的枚举类型..........每个值表示一个类型..........4是目录,0是未知,1是管道,2是字符设备,8表示文件...............6是块设备..........其他的都如字面表示..........很容易区分.........

㈣ Linux下C语言:如何遍历制定目录及其子目录下所有文件的文件名并将其按照最后修改时间排序呢

linux中有相关的API函数,可以读取目录中所有的文件名字,以及时间属性信息,你把这些信息读出来,利用各种排序算法排序就可以了

㈤ C 语言统计一个目录下的文件个数 windows linux C C++

没有这种函数。如果有,那么文件系统会变得很不稳定也不够效率:试想在多级目录下有大量文件,将这些文件一个个删除,如果有这个函数,那么代表每删除一个文件,所有相关目录都需要修改一次属性,总的IO甚至能达到没有这个功能的文件系统的N倍,伤硬盘不说,速度必然大打折扣,这对于可能需要作为服务器(服务器往往会有大量文件操作以及需要快速响应)使用的操作系统来说是很不利的。当然文件数虽然不会保存在目录属性里,但是windows遍历过目录后对这个目录的文件数有一个缓存,只要缓存还有效,下次再请求文件数的时候读取的是这个缓存

㈥ c linux reiserfs文件系统中遍历文件夹

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>

#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>

void printdir(char* dir, int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;

if( (dp = opendir(dir)) == NULL )
{
fprintf(stderr, "cannot open directory: %s\n", dir);
return;
}

chdir(dir);
while( (entry = readdir(dp)) != NULL)
{
lstat(entry->d_name, &statbuf);
if( S_ISDIR(statbuf.st_mode) )
{
if( strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0 )
continue;
printf("%*s%s/\n", depth, "", entry->d_name);
printdir(entry->d_name, depth+4);
}
else
printf("%*s%s\n", depth, "", entry->d_name);
}
chdir("..");
closedir(dp);
}

int main(int argc, char* argv[])
{
char *topdir = ".";
if( argc >= 2 )
topdir=argv[1];
printf("Directory scan of %s\n", topdir);
printdir(topdir, 0);
printf("Done.\n");

exit(0);
}

㈦ Linux下C/C++怎样编一个复制文件夹的程序

可以递归遍历文件夹下所有文件,根据文件大小和修改时间进行判断,把修改过的新版本覆盖旧版本。

本人并没有在Linux下编程的经验,只能给出思路,你找找Linux的系统调用,里面有需要文件操作功能,复制文件夹无非就是先创建文件夹,然后在把文件夹下的文件复制过来。对于文件夹内的文件夹,使用递归进行遍历。

我想你对递归应该了解,如果不想用系统调用的话,在Linux下我记得命令mkdir是创建文件夹,cp是复制文件,这样你可以在程序内使用system("mkdir 文件夹名")来进行创建文件夹,对应的可以用cp复制文件,不过这样比用系统调用效率低点

另:个人理解,Linux的系统调用跟Windows的API比较类似

㈧ 如何在linux系统中用C语言编程实现以非递归的方式查询指定目录下所有子目录的全部文件并保存文件名

把迭代得到的非文件文件夹项,即子目录保存到一个stack中。
随后逐个弹出栈顶元素并迭代之,就实现了以非递归方式遍历文件夹。

㈨ 欲在Linux系统下使用终端编写C语言程序,打算使用findfirst()、findnext()和fin

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>

int
main(int argc, char *argv[])
{
intptr_t handle;
struct _finddata_t fileinfo;

handle = _findfirst("D:\\mymtom\\src\\demo\\*.c", &fileinfo);
if (handle == -1) {
perror("_findfirst");
exit(1);
}

printf("%s\n",fileinfo.name);
while (_findnext(handle, &fileinfo) == 0) {
printf("%s\n",fileinfo.name);
}

_findclose(handle);

return 0;
}

㈩ linux shell 遍历文件夹 并将结果保存 到变量

#!/bin/bash
(($#<1))&&echo"paramiszero!"&&exit1
[!-d$1]&&echo"$1notpath"&&exit1
dir=$1
dir_p="$dirDirectory:"
cd$dir
dir=`pwd`
foriin`ls$dir`
do
if[-d$i];then
/tmp/sh/dir_file$i#我的脚本文件在/tmp/sh中,需要改一下这里
else
dir_p="$dir_pFile$i"
fi
done
cd..
echo$dir_p


实验结果:

[root@localhost sh]# ./dir_file /tmp/python/

python_2 Directory : File 1.log File 2.log

python_3 Directory : File 3.log

/tmp/python/ Directory : File p File t.py File y.py


这样应该可以吧,试试看

热点内容
android实时视频播放 发布:2024-11-20 07:11:18 浏览:103
oracle存储过程数组定义 发布:2024-11-20 07:11:17 浏览:844
64的汇编编译器 发布:2024-11-20 07:05:43 浏览:856
保定市后推式存储货架哪里买 发布:2024-11-20 07:03:25 浏览:556
家用suv适合什么配置 发布:2024-11-20 07:01:45 浏览:818
java免费课程 发布:2024-11-20 06:54:14 浏览:264
手机可以直接升级方舟编译器吗 发布:2024-11-20 06:53:35 浏览:285
成都plc编程培训 发布:2024-11-20 06:47:45 浏览:412
百奥泰的格乐立在运输存储过程中 发布:2024-11-20 06:46:14 浏览:123
bat创建文件夹命令 发布:2024-11-20 06:41:05 浏览:80