添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

C++ 文件查找

在C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数。这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirst、_findnext和_fineclose。具体如何使用,我会慢慢讲来~ 首先讲这个结构体吧~
_finddata_t ,这个结构体是用来存储文件各种信息的。
在io.h中有如下的宏:

#ifdef _USE_32BIT_TIME_T
#define _finddata_t     _finddata32_t
#define _finddatai64_t  _finddata32i64_t
#else
#define _finddata_t     _finddata64i32_t
#define _finddatai64_t  __finddata64_t

大致意思是根据32位还是64位,用相应的数据类型定义的变量,其中一个结构体定义如下:

struct _finddata64i32_t {
        unsigned    attrib;
        __time64_t  time_create;    /* -1 for FAT file systems */
        __time64_t  time_access;    /* -1 for FAT file systems */
        __time64_t  time_write;
        _fsize_t    size;
        char        name[260];

其中各部分变量的含义如下:
unsigned atrrib
文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。
文件属性是用位表示的,主要有以下一些:

_A_ARCH(存档)
_A_HIDDEN(隐藏)
_A_NORMAL(正常)
_A_RDONLY(只读)
_A_SUBDIR(文件夹)
_A_SYSTEM(系统)

之间可以用 | 运算来组合表示一个文件的属性:
例如只读+隐藏+系统属性,应该为:_A_HIDDEN | _A_RDONLY | _A_SYSTEM 。
接着是三个表示时间的变量:
time_t time_create:
这个time_create变量是用来存储文件创建时间的,time_t 类型本质是就是一个整型。
time_t time_access:
文件最后一次被访问的时间。
time_t time_write:
文件最后一次被修改的时间。
然后是文件大小和文件名:
_fsize_t size:
文件的大小。这里的_fsize_t是unsigned long类型,表示文件的字节数。
char name[260]:
文件的文件名。

前面也说了,这个结构体是用来存储文件信息的,那么如何把一个硬盘文件的文件信息“存到”这个结构体所表示的内存空间里去呢?这就要靠_findfirst、_findnext和_fineclose三个函数的搭配使用了。 首先还是对这三个函数一一介绍一番吧……

long _findfirst( char *filespec, struct _finddata_t *fileinfo );
返回值:
如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1。
参数:
filespec:标明文件的字符串,可支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件。
fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。
函数成功后,函数会把找到的文件的信息放入这个结构体中。

int _findnext( long handle, struct _finddata_t *fileinfo );
返回值:
若成功返回0,否则返回-1。
参数:
handle:即由_findfirst函数返回回来的句柄。
fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

int _findclose( long handle );
返回值:成功返回0,失败返回-1。
参数: handle :_findfirst函数返回回来的句柄。
大家看到这里,估计都能猜到个大概了吧?先用_findfirst查找第一个文件,若成功则用返回的句柄调用_findnext函数查找其他的文件,当查找完毕后用,用_findclose函数结束查找。

下面给出一个查找指定目录下,文件名符合匹配的模式的文件,并逐个打印出来。

#include<iostream>
#include<string>
#include<io.h>
using namespace std;
void filesearch(string path,string mode)
    struct _finddata_t filefind; //用来存储文件各种信息的结构体
    if(path[path.size()-1]=='\\')
        path.resize(path.size()-1);
    string curr=path+"\\"+mode;//欲查找的文件,支持通配符
    int done=0,handle;
    handle=_findfirst(curr.c_str(),&filefind);//第一次查找
    if(-1==handle)
        return;
        if(!strcmp(filefind.name,".."))//若为上级目录,则跳过
            continue;
        //---------process---------------
        curr=path+"\\"+filefind.name;
        //if(strstr(filefind.name,mode.c_str()))
        cout<<curr<<endl;
        //------------------------------
        if (_A_SUBDIR==filefind.attrib)
            filesearch(curr,mode);//递归查找子目录
    }while(!(done=_findnext(handle,&filefind)));
    _findclose(handle);    //别忘了关闭句柄  
void main()
    string path,mode;
    cout<<"请输入要搜的目录"<<endl;
    cin>>path;
    cout<<"请输入文件名模式"<<endl;
    cin>>mode;
    filesearch(path,mode);
                    C++ 文件查找在C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数。这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirst、_findnext和_fineclose。具体如何使用,我会慢慢讲来~ 首先讲这个结构体吧~  _finddata_t ,这个结构体是用来存储文件各种信息的。 在io.h中有如下的宏:#ifdef
				
C++ 文件查找C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数。这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirst、_findnext和_fineclose。具体如何使用,下面来一起看看吧 _findfirst与_findnext查找文件 一、这两个函数均在io.h里面。 二、首先了解一下一个文件结构体: struct _finddata_t { unsigned attrib; time_t time_create; time_t time_access; time_t time_wr
最近在学习文件操作,用到了_findfirst() 和_findnext() 两个函数,写了个小程序,输入一个目录名,输出它下面的文件和目录。 主要用到了这么几个CRT函数: _access(); /*判断文件文件夹路径是否合法*/ _chdir(); /*切换当前工作目录*/ _findfirst(); /*查找第一个符合要求的文件或目录*/ _findnext(); /*查找下一个
采用C++ 编写,只有一个函数。 第一个参数为必填的输入参数,填入待查找文件夹路径 第二个参数为输出参数,输出匹配到的文件信息(包括文件名,文件路径,和一个对应WIN32_FIND_DATA结构) 地三个参数为可选的输入参数,输入扩展名信息,扩展名格式为(.cpp, *.cpp, cpp)三者都可,大小写不区分,如果为空则输出目录下的所以文件,默认是输出所有文件 第四个参数为可选的输入参数,表明是否递归,如果为TRUE则递归子文件查找,如果为FALSE则不递归,默认是递归查找 BOOL FindFile(const WCHAR *szFolderPath, map<wstring, pair> &mapFile, const WCHAR *szExtendName = NULL, BOOL bRecursion = TRUE);
Find方法在区域内查找某值的第一个单元格,注意返回找到的单元格对象 Find方法只且永远返回该区域第一个匹配的对象 ·查找下一个需要使用FindNext或者FindPreous方法 2 查找就会有两个结果的可能,找到或者找不到 ·如果找到自然会返回找到的单元格对象 ·如果没有找到,则是该对象的初始状态Nothing什么都不是, 注意:不能使用=来判断是否Nothing-要用对象判断的特定符号is 来判断。 ·请注意Nothing不是False 判断时应该使用not对象is
Delphi操作文件的一个简单函数示例,主要是用到Win31中的DriveComboBox和DirectoryListBox两个组件及FindFirst,FindNext和FindClose三个文件操作函数。 /////////////////////////////////////////////////
C++中读取文件可以采用几个函数分别为,_findfirst、_findnext、_findclose。其中还要借助结构体 struct _finddata_t,_finddata_t主要用来存储各种文件的信息。struct _finddata64i32_t { unsigned attrib; __time64_t time_create; /* -...