前言
这是用来学习整理的,方便以后复习,但是里面的东西可能会有一些你不想要的
_findfirst、_findnext和_findclose
这三个东西是用来列出一定文件夹路径下的所有文件的,有用,但不多,这里简单介绍一下。
它们在这个头文件中:
#include<io.h>
结构体讲解
首先要讲一个结构体:
struct _finddata_t {
unsigned attrib;
time_t time_create;
time_t time_access;
time_t time_write;
_fsize_t size;
char name[260];
};
解说一下,time_t
和_fsize_t
分别是long
和unsigned long
。
参数解释如下:
attrib
:表示文件的属性,以下为属性常量:
unsigned _A_ARCH //存档
unsigned _A_HIDDEN //隐藏
unsigned _A_NORMAL //正常
unsigned _A_RDONLY //只读
unsigned _A_SUBDIR //文件夹
unsigned _A_SYSTEM //系统
time_create
:文件创建时间
time_access
:文件最后一次访问时间
time_write
:文件最后一次修改时间
size
:文件大小
name
:文件名
函数原型
_findfirst
原型如下:
long _findfirst(const char *, struct _finddata_t *);
第一个参数是路径,用.
来查询文件,就比如说.exe
就可以查询所有的.exe
文件。
第二个参数就是上面讲的struct
,大家自行理解。
此函数若运行成功会return
一个long
类型的句柄,否则返回-1。
_findnext
原型如下:
int _findnext(long *,struct _finddata_t *);
这个函数的参数与上面的类似。但是这一次第一个参数是_findfirst
函数返回的句柄。
_findclose
原型如下:
int _findclose(long *);
第一个参数是第一个函数返回的句柄。
以上两个的函数它的返回值都是0(成功)或-1(失败)。
示例
#include<iostream>
#include<vector>
#include<io.h>
using namespace std;
int main(){
string str,way;
cout<<"请输入文件路径:"<<endl;
cin>>str;
for(int i=0;i<str.size();i++){
if(str[i]=='\\')str[i]='/';
}
way=str;
cout<<"\n请输入文件类型:"<<endl;
cin>>str;
way+=str=="*"?"/":"/*";
way+=str;
long handle;
_finddata_t temp;
handle=_findfirst(way.c_str(),&temp);
if(handle==-1){
cout<<"Find flod ans file wrong\n";
return 0;
}
do{
cout<<temp.name<<endl;
}while(!_findnext(handle,&temp));
_findclose(handle);
}
上面的示例是非常简陋的,但可以对其拓展,实现更多功能。