zoukankan      html  css  js  c++  java
  • 遍历一个文件夹所有文件

    利用FindFirstFile(),FindNextFile()函数历遍指定目录的所有文件

    标签: c++
    分类:

    本文利用FindFirstFile(),FindNextFile()函数历遍指定目录的所有文件,最基础的历遍所有文件。一下代码尚无法解决文件名为中文时的乱码问题,以及无法分别无后缀的文件名和文件夹名的区别。


    FindFirstFile()用于获得指定目录的第一个文件。其原型为:

    lpFileName 用于指定搜索目录和文件类型,可以用通配符,初次使用需要注意 需要用转义字符表达。即:D:\C++ 6.0\;
    lpFindFileData 用于保存搜索得到的文件信息。
    FindFirstFile() 返回HANDLE类型,为下一次搜索提供信息。当搜索失败时,返回INVALID_HANDLE_VALUE

    1. HANDLE WINAPI FindFirstFile(  
    2.     _In_   LPCTSTR lpFileName,  
    3.     _Out_  LPWIN32_FIND_DATA lpFindFileData  
    4. );  


    FindNextFile() 顾名思义,用于搜索下一个文件,当不存在下一个文件,即搜索完毕后,返回false;

    1. BOOL WINAPI FindNextFile(  
    2.     _In_   HANDLE hFindFile,  
    3.     _Out_  LPWIN32_FIND_DATA lpFindFileData  
    4. );  


    hFindFile 上一次FindFirstFile或FindNextFile得到的HANDLE;
    lpFindFileData 用于保存搜索得到的文件信息。

    lpFindFileData用于获取文件信息。通常,最初的两次搜索得到的文件名为:"." 、"..",分别代表当前目录和上级目录。写代码时需要注意。

    1. HANDLE hFile;  
    2. LPCTSTR lpFileName = L".\*.*"; //指定搜索目录和文件类型,如搜索d盘的音频文件可以是"D:\*.mp3"  
    3. WIN32_FIND_DATA pNextInfo;  //搜索得到的文件信息将储存在pNextInfo中;  
    4. hFile = FindFirstFile(lpFileName,&pNextInfo);//请注意是 &pNextInfo , 不是 pNextInfo;  
    5. if(hFile == INVALID_HANDLE_VALUE)  
    6. {  
    7.     //搜索失败  
    8.     exit(-1);  
    9. }  
    10. while(FindNextFile(hFile,&pNextInfo))  
    11. {  
    12.     if(pNextInfo.cFileName[0] == '.')//过滤.和..  
    13.        continue;  
    14.     cout<<"得到文件:"<<pNextInfo.cFileName<<endl;  
    15. }  

    头文件 #include <windows.h>


    1. HANDLE file;  
    2. LPCTSTR lpFileName="浙江黄大豆\*.*";  
    3. WIN32_FIND_DATA pNextInfo;  
    4. file=FindFirstFile(lpFileName, &pNextInfo);  
    5. if (file == INVALID_HANDLE_VALUE)  
    6. {  
    7.     cout<<"搜索失败"<<endl;  
    8.     system("pause");  
    9.     exit(0);  
    10. }  
    11. while (FindNextFile(file, &pNextInfo))  
    12. {  
    13.     if (pNextInfo.cFileName[0] == '.')  
    14.         continue;  
    15.     cout<<"得到文件:"<<pNextInfo.cFileName<<endl;  
    16. }  


    得到文件夹(黑豆)中的所有.jpg结尾的文件

      1. void findfile(void)  
      2. {  
      3.     /* 
      4.     string path; 
      5.     cout<<"inpt(xx\xx\*.*): "<<endl; 
      6.     cin>>path; 
      7.     cout<<path<<endl; 
      8.     */  
      9.     HANDLE file;    
      10.     LPCTSTR lpFileName="黑豆\*.jpg";//path.c_str();    
      11.     WIN32_FIND_DATA pNextInfo;    
      12.     file=FindFirstFile(lpFileName, &pNextInfo);    
      13.     if (file == INVALID_HANDLE_VALUE)     
      14.     {    
      15.         cout<<"搜索失败"<<endl;    
      16.         system("pause");    
      17.         exit(0);    
      18.     }    
      19.     cout<<"得到文件:"<<pNextInfo.cFileName<<endl;//请注意这句  
      20.     int count=1;  
      21.     while (FindNextFile(file, &pNextInfo))    
      22.     {    
      23.         if (pNextInfo.cFileName[0] == '.')    
      24.              continue;    
      25.         cout<<"得到文件:"<<pNextInfo.cFileName<<endl;    
      26.         count++;  
      27.     }   
      28.     cout<<"count = "<<count<<endl;  
  • 相关阅读:
    Heritrix源码分析(十) Heritrix中的Http Status Code(Http状态码)(转)
    Heritrix源码分析(九) Heritrix的二次抓取以及如何让Heritrix抓取你不想抓取的URL
    Heritrix源码分析(八) Heritrix8个处理器(Processor)介绍(转)
    HTML 的 iframe 元素
    CSS 选择器及其优先级
    在触屏设备中拖动 overflow 元素
    关于博客园博问标签的自我实现
    ABAP中读取EXCEL中不同的SHEET数据
    创建表索引
    Call Transaction
  • 原文地址:https://www.cnblogs.com/fengliu-/p/7229983.html
Copyright © 2011-2022 走看看