查找给定路径下的所有文件

    最近帮朋友做一个程序题目,题目最关键的问题就是查找出给定路径下的所有文件。原以为这种常见的问题应该在网上随便能搜到,事与愿违,搜到的大多不能跑(各种不给力),所以自己就稍微借鉴了前人的代码,作了一些修改,很幸运最终是能用了,嘿嘿。。。

    下面是程序代码:

#include <stddef.h>
#include <stdio.h>
#include <windows.h>
#include <sys/types.h>
#include <sys/stat.h>
FILE *file; /*将遍历出的文件保存到特定的文件,本文采用save.txt*/

/**查找函数*/
void findAllFile(char *pFilePath)
{
     WIN32_FIND_DATA FindFileData;
     HANDLE hFind = INVALID_HANDLE_VALUE;
     char DirSpec[MAX_PATH+1];
     DWORD dwError;

     strncpy(DirSpec, pFilePath, strlen(pFilePath)+1);
     SetCurrentDirectory(pFilePath);
     strncat(DirSpec, "//*.*", 5);

 

     hFind = FindFirstFile(DirSpec, &FindFileData);

 

     if (hFind == INVALID_HANDLE_VALUE)
     {
          printf("invalid file handle.Error is %u/n", GetLastError());
          return;
     }
     else
     {
          if (FindFileData.dwFileAttributes !=FILE_ATTRIBUTE_DIRECTORY)
          {
               char path[MAX_PATH+1];
               strcpy(path, pFilePath);
               strncat(path, "//", 2);
               strcat(path, FindFileData.cFileName);
               printf("%s/n", path);
               fputs(path, file);
               fputs("/n", file);
           }
          else if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
                 && strcmp(FindFileData.cFileName, ".") !=0
                 && strcmp(FindFileData.cFileName, "..") !=0)
           {
               char Dir[MAX_PATH + 1];
               strcpy(Dir, pFilePath);
               strncat(Dir, "//", 2);
               strcat(Dir, FindFileData.cFileName);

               findAllFile(Dir);
            }
  
          while(FindNextFile(hFind, &FindFileData) !=0)
          {
               if (FindFileData.dwFileAttributes !=FILE_ATTRIBUTE_DIRECTORY)
               {
                   char path[MAX_PATH+1];
                   strcpy(path, pFilePath);
                   strncat(path, "//", 2);
                   strcat(path, FindFileData.cFileName);
                   printf("%s/n", path);
                   fputs(path, file);
                   fputs("/n", file);
                }
                else if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
                           && strcmp(FindFileData.cFileName, ".") !=0
                           && strcmp(FindFileData.cFileName, "..") !=0)
                 {
                     char Dir[MAX_PATH + 1];
                     strcpy(Dir, pFilePath);
                     strncat(Dir, "//", 2);
                     strcat(Dir, FindFileData.cFileName);

                     findAllFile(Dir);
                 }
          }//end while

 

          dwError = GetLastError();
          FindClose(hFind);
          if (dwError !=ERROR_NO_MORE_FILES)
          {
               printf("Find file error.Error is %u/n", GetLastError());
               return;
          } 
      }//end else
 }


/*主函数*/
int main()
{
     file = fopen("save.txt", "w"); /*打开文件*/

 

     char input_path[50]; 
     printf("please enter input_path:/n");
     scanf("%s", &input_path);     /*要查找的路径*/

 

     findAllFile(input_path);   /*执行查找*/

 

     fclose(file);                    /*关闭文件*/

 

     int a;
     scanf("%d", &a);
     return 0;
}

 

运行结果:

输入:D:/test

输出:

D:/test/subtest/subsubtest/test.rar
D:/test/subtest/test3.txt
D:/test/subtest/test4.txt
D:/test/test1.txt
D:/test/test2.txt

 

    程序中最重要的就是了解 WIN32_FIND_DATA结构、FindFirstFile函数、FindNextFile函数和递归思想。这样网上都有很多资料,不再做详细说明。完。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值