首页 > 代码库 > 函数FindFirstFile

函数FindFirstFile

 

 文件查找

Struct Lnode{

Char table[256];         //保存文件夹名

Struct Lnode*next;

}

加文件夹入链表

Lnode *newList;

Void AddList(char *list)          //list为文件夹名

{

     NewList=new Lnode;

     Strcpy(NewList->table,list);

     newList->next=NULL;

     if(h->next==NULL)

        h->next=newList;       //h为头结点

     else

     {

       r->next=newList;        //r始终指向尾节点

       r=newList;

     }

}

FindFirstFile和FindNextFile

HANDLE   FindFirstFile{

   LPCTSTR  IpFileName; //指向要查找的文件名(包含路径)

   LPWIN32_FIND_DATA IpFindFileData;   //输出参数,指向一个结构。此结构可以描述找到的文件或文件夹的属性。

}

函数调用成功则返回可供函数FindNextFile和函数FindClose使用的查找句柄,否则返回INVALID_HANDLE_VALUE;

Typedef struct _WIN32_FIND_DATA{

DWORD dwFileAttributes;     //文件属性

FILETIME ftCreationTime;     //创建文件的时间

FILETIME ftLastAccessTime;    //最近一次访问文件的时间

FILETIME ftLastWriteTime;    //最近一次修改文件的时间

DWORD nFileSizeHigh        //文件大小的高位字

DWORD nFileSizeLow;        //文件大小的地位字

DWORD dwReserved0;       //保留,未使用

DWORD dwReserved1;       //保留,未使用

TCHAR cFileName[MAX_PATH];    //文件的名称

TCHAR cAlternateFileName[14];    //文件的替换名称,用文件名.后缀名表示

} WIN32_FIND_DATA,*p WIN32_FIND_DATA;

 

BOOL  FindNextFile   {

   HANDLE  hFindFile;      //此参数指向了函数FindFirstFile返回的查找句柄

 

LPWIN32_FIND_DATA IpFindFileData;

 

}

函数调用成功则返回可供函数FindNextFile和函数FindClose使用的查找句柄,否则返回INVALID_HANDLE_VALUE;

 

 

查找文件一般使用的结构

hFindFile=FindFirstFile(IpFileName,&IpFindData);

if(hFindFile!=INVALID_HANDLE_VALUE)

{

      Do

{

}while(FindNextFile(hFindFile,&findData))

}

 

遍历目录

Void FindFile(char *pRoad,char *pFile)

//pRoad为要查找的路径,pFile为要查找的文件

{

           Char FileRoad[256]={0};//要查找文件的路径

           Char DirRoad[256]={0};//存放要查找的路径

           Char FindedFile[256]={0};

           Char FindedDir[256]={0};//存放找到的是文件夹的路径

           Strcpy(FileRoad,pRoad);

           Strcpy(DirRoad,pRoad);

           Strcat(DirRoad,”\\*.*”);

         

         //查找文件,把找到的放入文件夹链表

          WIN32_FIND_DATA findData;

          HANDLE hFindFile;

          hFindFile=FindFirstFile(DirRoad,&findData);

          if(hFindFile!=INVALID_HANDLE_VALUE)

          {

                  Do

{

 If(findData.cFileName[0]==’.’)

      Continue;

If(findData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)

{

    Strcpy(FindedDir,pRoad);

    Strcat(FindedDir,”\\”);

    Strcat(FindDir,findData.cFileName);

AddList(FindDir);

Memset(FindDir,0x00,256);

}

}while(FindNextFile(hFindFile,&findData));

}

 

 

Strcat(FileRoad,”\\”);

Strcat(FileRoad,pFile);

//查找要查找的文件

hFindFile=FindFirstFile(FileRoad,&findData);

if(hFindFile!=INVALID_HANDLE_VALUE)

{

    Do{

Strcpy(FindedFile,pRoad);

Strcat(FindedFile,”\\”);

Strcat(FindedFile,findData.cFileName);

Printf(“%s\n”,FindedFile);

Memset(FindedFile,0x00,256);

}while(FindNextFile(hFindFile,&findData));

}

}

 

Int searchFile(char * Directory,char *SeachFile)

{

     Lnode newList;

     Strcpy(newList->table,Directory);

     newList->next=NULL;

 

     while(true)

     {

          Lnode *Find;

          If(r->next!=NULL)

          {

               Find=r->next;

               r->next=r->next->next;

               FindFile(Find->table,searchFile);

Else

{

        Printf(“文件搜索完毕\n”);

       Return 0;

}

}

Return 0;

}

 

函数FindFirstFile