zoukankan      html  css  js  c++  java
  • C/C++遍历Windows文件夹下的所有文件

       因为文件夹中往往包含文件和文件夹。想要遍历所有的文件,必须遍历文件夹中所有的文件夹。很显然,这个描述满足递归的两个要素:(1)问题的规模在不断的缩小,且新问题的模式与旧问题相同。很显然文件夹中含有子文件夹同样需要遍历。(2)含有简单的终止条件,即遇到文件夹下再无文件夹停止。

         C++遍历文件夹下所有文件如下:

    复制代码
    int osmgpxPaser::GetAllgpxFilepathFromfolder(char*  Path)
    {
        char szFind[MAX_PATH];
        WIN32_FIND_DATA FindFileData;
        strcpy(szFind,Path);
        strcat(szFind,"\*.*");
        HANDLE hFind=FindFirstFile(szFind,&FindFileData);
        if(INVALID_HANDLE_VALUE == hFind)   
            return -1;
    
        do
        {
            if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                if(strcmp(FindFileData.cFileName,".")!=0 && strcmp(FindFileData.cFileName, "..")!=0)
                {
                    //发现子目录,递归之
                    char szFile[MAX_PATH] = {0};
                    strcpy(szFile,Path);
                    strcat(szFile,"\");
                    strcat(szFile,FindFileData.cFileName);
                    GetAllgpxFilepathFromfolder(szFile);
                }
            }
            else
            {
                //找到文件,处理之
                std::cout << lpPath << "\" << FindFileData.cFileName << std::endl;
            }
        }while(FindNextFile(hFind,&FindFileData));
    
        FindClose(hFind);
    
        return 0;
    }
    复制代码

    这里不得不说一下FindFirstFile()函数。使用它必须引用windows.h头文件,FindFirstFile第一个参数需要一个路径,但要写*.*,表示从所有文件中找到的第一个.第二个参数用于存储文件信息,找到的文件的文件结构被记录在WIN32_FIND_DATA结构体里。

    另外,如果直接编译以上代码可能会出现以下错误: error C2664: “FindFirstFileW”: 不能将参数 1 从“char [261]”转换为“LPCWSTR” ,解决方法为:

    把工程设置里去掉UNICODE宏定义:项目->XXX属性->配置属性->常规->字符集 改为 “未设置” 就去掉了unicode支持,不过应该回报一个警告。

    或在#include <windows.h>之前加上一句 #undef UNICODE

  • 相关阅读:
    Spring MVC多动作控制器
    Spring MVC简单URL处理程序映射
    Spring MVC控制器类名称处理映射
    Spring MVC文件上传处理
    再探Tomcat
    Git教程之工作区和暂存区
    linux系统启动级别
    浅析JAVA_HOME,CLASSPATH和PATH的作用
    *Linux之rm命令
    @CentOS环境下Java开发环境的搭建
  • 原文地址:https://www.cnblogs.com/daochong/p/7127286.html
Copyright © 2011-2022 走看看