• C++ Browser Folder and File Win32


    #include<windows.h>
    
    #include<iostream>
    
    #include<string>
    
    using namespace std;
    
    
    
    //只能处理目录:lpPath只能是路径
    
    void find(char *lpPath)
    
    {
    
        char szFind[MAX_PATH];
    
       char szFile[MAX_PATH];
    
    
    
        WIN32_FIND_DATA FindFileData;
    
    
    
        strcpy(szFind,lpPath);
    
        strcat(szFind,"\\*.*");
    
    
    
        HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
    
        if(INVALID_HANDLE_VALUE == hFind)    return;
    
        while(TRUE)
    
        {
    
            if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    
            {
    
                if(FindFileData.cFileName[0]!='.')
    
                {
    
                    strcpy(szFile,lpPath);
    
                    strcat(szFile,"//");
    
                    strcat(szFile,FindFileData.cFileName);
    
                    find(szFile);
    
                }
    
            }
    
            else
    
            {      
    
                   cout<<FindFileData.cFileName<<endl;
    
            }
    
            if(!FindNextFile(hFind,&FindFileData))
    
                break;
    
        }
    
        FindClose(hFind); 
    
    }
    
    //可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符
    
    void _find(string path){ 
    
         //取路径名最后一个"//"之前的部分,包括"//"
    
        string prefix=path.substr(0,path.find_last_of('//')+1);
    
    
    
        WIN32_FIND_DATA FindFileData;
    
        HANDLE hFind=::FindFirstFile(path.c_str(), &FindFileData);
    
        if(INVALID_HANDLE_VALUE == hFind)
    
        {
    
           cout<<"文件通配符错误"<<endl;
    
          return;
    
       }
    
        while(TRUE)
    
        {
    
          //目录
    
            if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    
            {
    
                //不是当前目录,也不是父目录
    
                if(FindFileData.cFileName[0]!='.')
    
                {
    
                    //查找下一级目录
    
                    _find(prefix+FindFileData.cFileName+"//"+"*.*");
    
                }
    
            }
    
            //文件
    
            else
    
            {   
    
                 cout<<FindFileData.cFileName<<endl;
    
            }
    
            if(!FindNextFile(hFind,&FindFileData))
    
                  break;
    
        }
    
        FindClose(hFind); 
    
    }
    
    
    
    void main(){
    
        //find("E:");//目录:E盘
    
        //_find("E://*.*");//E盘下所有文件
    
    
    
        string str="./test"; //这里指定的是目录
    
    
    
        //string path;
    
        //cout<<"请输入文件通配符:"<<flush;
    
        //cin>>path;
    
        // str=str+path;
    
        find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..//*" 
    
        //_find(str);//可以处理"*","..//*" 不可以处理".",".."
    
        system("pause");
    
    }


    C++自带结构体:

    typedef struct _WIN32_FIND_DATA{
    
       DWORD dwFileAttributes; // 文件属性
       FILETIME ftCreationTime; // 文件创建时间
       FILETIME ftLastAccessTime; // 文件最后一次访问时间
       FILETIME ftLastWriteTime; // 文件最后一次修改时间
       DWORD nFileSizeHigh; // 文件长度高 32 位
       DWORD nFileSizeLow; // 文件长度低 32 位
       DWORD dwReserved0; // 系统保留
       DWORD dwReserved1; // 系统保留
       TCHAR cFileName[ MAX_PATH ]; // 长文件名
       TCHAR cAlternateFileName[ 14 ]; // 文件的可选名
    
    } WIN32_FIND_DATA;



  • 相关阅读:
    lua面向对象(定义与调用)
    luastring(字符串)
    luatable(表)
    lua面向对象(创建与实例化)
    pandas安装方法(常规安装失败解决方法)
    lua循环
    windows常用命令schtasks
    ios UI自动化 appium参数配置
    ios UI自动化环境配置
    jmeter进行websocket 通信
  • 原文地址:https://www.cnblogs.com/yefengmeander/p/2887559.html
Copyright © 2020-2023  润新知