zoukankan      html  css  js  c++  java
  • Windows下文件列举,搜索

    Windows下列举文件用的函数是 FindFirstFile 和 FindNextFile ,另外一个结构体是WIN32_FIND_DATA

    以下是MSDN对于WIN32_FIND_DATA的定义

    typedef struct _WIN32_FIND_DATA {
      DWORD    dwFileAttributes;
      FILETIME ftCreationTime;
      FILETIME ftLastAccessTime;
      FILETIME ftLastWriteTime;
      DWORD    nFileSizeHigh;
      DWORD    nFileSizeLow;
      DWORD    dwReserved0;
      DWORD    dwReserved1;
      TCHAR    cFileName[MAX_PATH];
      TCHAR    cAlternateFileName[14];
    } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
    

    FindFirstFile 和 FindNextFile 传递的参数都如下

    HANDLE WINAPI FindFirstFile(
      _In_   LPCTSTR lpFileName,
      _Out_  LPWIN32_FIND_DATA lpFindFileData
    );
    
    
    BOOL WINAPI FindNextFile(
      _In_   HANDLE hFindFile,
      _Out_  LPWIN32_FIND_DATA lpFindFileData
    );
    
    

    这里我们需要使用的是cFileName这个参数,另外我们还可以查询访问时间以及写入时间,分别是ftLastAccessTime, ftLastWriteTime

    另外在Windows中,目录使用 // 或者 \ 均可,而在Linux中只能使用 /

    列举某个文件下的所有文件

    #include <Windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <iostream>
    
    using namespace std;
    
    char filename[100][10];
    
    int main() {
    	int index = 0;
    	int i;
    	WIN32_FIND_DATA findData;
    	HANDLE hFile = FindFirstFile(TEXT("Debug\*"), &findData);
    	memset(filename, 0, sizeof(filename));
    
    	if(INVALID_HANDLE_VALUE == hFile) {
    		printf("find first file error
    ");
    		exit(1);
    	}
    
    	while(FindNextFile(hFile, &findData)) {
    		for(i = 0; findData.cFileName[i] != ''; i++) {
    			filename[index][i] = findData.cFileName[i];
    		}
    		filename[index++][i] = '';
    	}
    	for(i = 0; i < index; i++) printf("%s
    ", filename[i]);
    
    	return 0;
    }


    如果是目录的话,那就需要不断的递归了

    void FindFiles(CString &strPath) {
        WIN32_FIND_DATA findData;
    
        CString strTemp = strPath;
        strTemp.Format(_T("%s\*.*"), strPath);//查找指定目录下的直接的所有文件和目录
    
        HANDLE hFile = FindFirstFile(strTemp, &findData);
        while (hFile != INVALID_HANDLE_VALUE) {
            if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {       //如果是目录
                if(findData.cFileName[0] != _T('.')) {       //排除.和..文件夹
                    strTemp =  strPath+ CString("\") + findData.cFileName;            //获得完整路径
                    FindFiles(strTemp);                //递归查找当前目录的文件
                }
            }
            else {
                strTemp =  strPath+ CString("\") + findData.cFileName;
            }
    
            if(!FindNextFile(hFile, &findData)) {
                break;
            }
        }
    }


     

  • 相关阅读:
    WRF WPS预处理
    CVS安装
    Linux窗口最小化消失,任务栏上无法找到的解决方法
    NCARG安装配置出现error while loading shared libraries: libg2c.so.0问题额解决办法
    Netcdf安装
    Embedding R-generated Interactive HTML pages in MS PowerPoint(转)
    The leaflet package for online mapping in R(转)
    Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
    What does a Bayes factor feel like?(转)
    Weka算法介绍
  • 原文地址:https://www.cnblogs.com/pangblog/p/3265309.html
Copyright © 2011-2022 走看看