• 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;
            }
        }
    }


     

  • 相关阅读:
    tableview 与 tableview cell
    swift基础知识
    HttpRequest
    ios界面跳转
    C# TextBox常用方法总结
    C#中string.format用法详解
    数据库填充DataSet,逐行访问
    C#连接SQL SERVER数据库的详细步骤!
    高德地图API INVALID_USER_SCODE问题以及keystore问题
    基础地图Android SDK
  • 原文地址:https://www.cnblogs.com/pangblog/p/3265309.html
Copyright © 2020-2023  润新知