zoukankan
html css js c++ java
Linux下遍历目录下的文件
方法1:
http://tag.csdn.net/Article/ef431d9b-68b3-419f-9f85-1fb9279f904a.html
//
ListFile.cpp
#include
<
stdio.h
>
#include
<
dirent.h
>
#include
<
sys
/
types.h
>
int
main(
int
argc,
char
*
argv[])
{
if
(
2
!=
argc)
{
printf(
"
Usage:ListFileSourceFolder
"
);
return
1
;
}
DIR
*
pDir
=
NULL;
struct
dirent
*
ent
=
NULL;
pDir
=
opendir(argv[
1
]);
if
(NULL
==
pDir)
{
printf(
"
Source folder not exists!
"
);
return
1
;
}
while
(NULL
!=
(ent
=
readdir(pDir)))
{
printf(
"
%s
"
, ent
->
d_name);
}
closedir(pDir);
pDir
=
NULL;
方
//
ListFile.cpp
#include
<
stdio.h
>
#include
<
dirent.h
>
#include
<
sys
/
types.h
>
int
main(
int
argc,
char
*
argv[])
{
if
(
2
!=
argc)
{
printf(
"
Usage:ListFileSourceFolder
"
);
return
1
;
}
DIR
*
pDir
=
NULL;
struct
dirent
*
ent
=
NULL;
pDir
=
opendir(argv[
1
]);
if
(NULL
==
pDir)
{
printf(
"
Source folder not exists!
"
);
return
1
;
}
while
(NULL
!=
(ent
=
readdir(pDir)))
{
printf(
"
%s
"
, ent
->
d_name);
}
closedir(pDir);
pDir
=
NULL;
法2:
http://topic.csdn.net/t/20051221/16/4472968.html
试试下面的代码,我是在redhat上编译运行的。
//
g++ -o read_dir read_dir.cpp
//
用于列出参数目录下的文件
#include
<
stdio.h
>
#include
<
stdlib.h
>
#include
<
sys
/
types.h
>
#include
<
dirent.h
>
int
main(
int
argc,
char
*
argv[])
{
DIR
*
dp;
struct
dirent
*
dirp;
if
(argc
!=
2
)
{
printf(
"
not enough arguments! exit!\n
"
);
exit(
0
);
}
if
((dp
=
opendir(argv[
1
]))
==
NULL)
{
printf(
"
can't open %s!\n
"
,argv[
1
]);
exit(
0
);
}
while
((dirp
=
readdir(dp))
!=
NULL)
printf(
"
%s\n
"
,dirp
->
d_name);
closedir(dp);
}
方法3
#include
<
stdio.h
>
#include
<
dirent.h
>
#include
<
sys
/
types.h
>
#include
<
sys
/
stat.h
>
void
dir_scan(
char
*
path,
char
*
file);
int
count
=
0
;
int
main(
int
argc,
char
*
argv[])
{
struct
stat s;
if
(argc
!=
2
)
{
printf(
"
one direction requried\n
"
);
exit(
1
);
}
if
(lstat(argv[
1
],
&
s)
<
0
)
{
printf(
"
lstat error\n
"
);
exit(
2
);
}
if
(
!
S_ISDIR(s.st_mode))
{
printf(
"
%s not direction name\n
"
,argv[
1
]);
exit(
3
);
}
dir_scan(
""
, argv[
1
]);
printf(
"
total: %d files\n
"
, count);
exit(
0
);
}
void
dir_scan(
char
*
path,cha日
*
file)
{
struct
stat s;
DIR
*
dir;
struct
dirent
*
dt;
char
dirname[
50
];
memset(dirname,
0
,
50
*
sizeof
(
char
));
strcpy(dirname,path);
if
(lstat(file,
&
s)
<
0
)
{
printf(
"
lstat error\n
"
);
}
if
(S_ISDIR(s.st_mode))
{
strcpy(dirname
+
strlen(dirname), file);
strcpy(dirname
+
strlen(dirname),
"
/
"
);
if
((dir
=
opendir(file))
==
NULL)
{
printf(
"
opendir %s/%s error\n
"
);
exit(
4
);
}
if
(chdir(file)
<
0
)
{
printf(
"
chdir error\n
"
);
exit(
5
);
}
while
((dt
=
readdir(dir))
!=
NULL)
{
if
(dt
->
d_name[
0
]
==
'
.
'
)
{
continue
;
}
dir_scan(dirname,dt
->
d_name);
}
if
(chdir(
"
..
"
)
<
0
)
{
printf(
"
chdir error\n
"
);
exit(
6
);
}
}
else
{
printf(
"
%s%s\n
"
, dirname, file);
count
++
;
}
}
查看全文
相关阅读:
Java编辑PDF写入文字 插入图片
Java图片压缩
Java base64 图片编码转换
JAVA操作字符串
JAVA获取文件夹下所有的文件
IntelliJ IDEA 注释模板设置
IntelliJ IDEA 添加junit插件
python操作mysql数据库系列-安装MySql
python操作mysql数据库系列-安装MySQLdb
软件测试工程师为什么要不断提高自身技能?
原文地址:https://www.cnblogs.com/cy163/p/730294.html
最新文章
关于各种文件用Editplus的方式打开出现“向程序发送命令时出现问题”的解决方法
如何在eclipse中添加ADT
关于eclipse安装Genymotion插件的方法
关于Eclipse无法识别手机或者模拟器的解决方案
vc的环境变量配置和缺少mspdb60.dll的解决方法
路由器怎么设置无线上网
关于Eclipse中Ctrl+Alt+Down和Ctrl+Alt+Up不起作用的解决方法
Hello World !
Redis连接
Redis服务器
热门文章
Redis备份
Redis安全
Redis基准
Redis客户端连接
Redis管道传输
Redis分区
Redis Java连接操作
Redis PHP连接操作
JAVA给图片添加水印
JAVA 中文 unicode 相互转换 文件读取
Copyright © 2011-2022 走看看