C++从⼀个⽂件夹中读出所有txt⽂件的⽅法⽰例
前⾔
前段时间做项⽬需要读取⼀个⽂件夹⾥⾯所有的txt⽂件,查询资料后得到以下实现⽅法:⾸先了解⼀下这个结构体
struct _finddata_t { unsigned attrib;
time_t time_create; time_t time_access; time_t time_write; _fsize_t size; char name[260];};
其中各成员变量的含义如下:
unsigned atrrib: ⽂件属性的存储位置。它存储⼀个unsigned单元,⽤于表⽰⽂件的属性。⽂件属性是⽤位表⽰的,主要有以下⼀些:_A_ARCH(存档)、 _A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(⽂件夹)、_A_SYSTEM(系统)。这些都是在中定义的宏,可以直接使⽤,⽽本⾝的意义其实是⼀个⽆符号整型(只不过这个整型应该是2的⼏次幂,从⽽保证只有⼀位为 1,⽽其他位为0)。既然是位表⽰,那么当⼀个⽂件有多个属性时,它往往是通过位或的⽅式,来得到⼏个属性的综合。例如只读+隐藏+系统属性,应该为:_A_HIDDEN | _A_RDONLY | _A_SYSTEM 。time_t time_create: ⽂件创建时间。
time_t time_access: ⽂件最后⼀次被访问的时间。time_t time_write: ⽂件最后⼀次被修改的时间。_fsize_t size: ⽂件的⼤⼩。
char name [_MAX_FNAME ]:⽂件的⽂件名。这⾥的_MAX_FNAME是⼀个常量宏,它在头⽂件中被定义,表⽰的是⽂件名的最⼤长度。
查找⽂件需要⽤到_findfirst 和 _findnext 两个函数,这两个函数包含在io.h库中1、_findfirst函数:long _findfirst(const char *, struct _finddata_t *);
第⼀个参数为⽂件名,可以⽤\"*.*\"来查找所有⽂件,也可以⽤\"*.cpp\"来查找.cpp⽂件。第⼆个参数是_finddata_t结构体指针。若查找成功,返回⽂件句柄,若失败,返回-1。2、_findnext函数:int _findnext(long, struct _finddata_t *);
第⼀个参数为⽂件句柄,第⼆个参数同样为_finddata_t结构体指针。若查找成功,返回0,失败返回-1。3、_findclose()函数:int _findclose(long);
只有⼀个参数,⽂件句柄。若关闭成功返回0,失败返回-1。代码及实现需要输出的⽂件
运⾏结果
代码
#include #include #include #include using namespace std
void GetLineAndPrint(string in_name){
ifstream fin(in_name); if (!fin) {
cerr << \"open file error\" << endl; exit(-1);
}
string str;
while (getline(fin, str)) {
cout << str << endl; }}
int main(){
struct _finddata_t fileinfo; string in_path; string in_name;
cout << \"输⼊⽂件夹路径:\" ; cin >> in_path;
string curr = in_path + \"\\\\*.txt\"; long handle;
if ((handle = _findfirst(curr.c_str(), &fileinfo)) == -1L) {
cout << \"没有找到匹配⽂件!\" << endl; return 0; } else {
in_name = in_path + \"\\\\\" + fileinfo.name; GetLineAndPrint(in_name);
while (!(_findnext(handle, &fileinfo))) {
in_name = in_path + \"\\\\\" + fileinfo.name; GetLineAndPrint(in_name); }
_findclose(handle); }}
注:代码在vs2017中编译通过。总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。