zoukankan      html  css  js  c++  java
  • 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;



  • 相关阅读:
    【设计模式】—— 单例模式Singleton
    【java开发系列】—— 深克隆和浅克隆
    【设计模式】—— 原型模式Prototype
    ArcMap 导入Excel坐标数据
    如何将XML文件导入Excel中
    ArcGIS API for Javascript之专题图的制作(四)热力图渲染(上)
    ArcGIS js api 手动构建FeatureLayer
    word怎样从第三页开始设置页码
    ArcGIS API for JS4.7加载FeatureLayer,点击弹出信息并高亮显示
    [转载]ArcGIS SERVER 9.3如何清除REST缓存
  • 原文地址:https://www.cnblogs.com/yefengmeander/p/2887559.html
Copyright © 2011-2022 走看看