递归枚举目录内的文件、读取文本文件内的行内容

    技术2022-05-20  59

    #include <windows.h> #include <vector> #include <string> using namespace std; // 枚举指定目录(包括其中的所有子目录)中的所有文件 int RecursiveEnumFile(const char* szDir, vector<string>& vFileNameList) { char szQuestContext[MAX_PATH]; strcpy(szQuestContext, szDir); strcat(szQuestContext, "\\*.*"); WIN32_FIND_DATA cWin32FindData; HANDLE hHandle = FindFirstFile(szQuestContext, &cWin32FindData); if ( hHandle != INVALID_HANDLE_VALUE ) { do { if ( 0 != strcmp(cWin32FindData.cFileName, ".") && 0 != strcmp(cWin32FindData.cFileName, "..") ) { if ( (cWin32FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) != 0 ) { char szNextLevelDir[MAX_PATH]; strcpy(szNextLevelDir, szDir); strcat(szNextLevelDir, "\\"); strcat(szNextLevelDir, cWin32FindData.cFileName); RecursiveEnumFile(szNextLevelDir, vFileNameList); } else { char szFullFileName[MAX_PATH]; strcpy(szFullFileName, szDir); strcat(szFullFileName, "\\"); strcat(szFullFileName, cWin32FindData.cFileName); vFileNameList.push_back(szFullFileName); } } } while ( FindNextFile(hHandle, &cWin32FindData) ); FindClose(hHandle); return 0; } else { return -1; } } // 读取文本文件中的每一行的内容(注:该文本文件的最后应该加上一个回车换行符) int ReadFileLine(const char* szFileName, vector<string>& vFileLine) { const int MAX_LINE_LEN = 512; // 单行所允许的最大长度 char szLineBuf[MAX_LINE_LEN]; FILE *fp = fopen(szFileName, "rb"); if ( fp ) { while ( NULL != fgets(szLineBuf, sizeof(szLineBuf), fp) ) { szLineBuf[strlen(szLineBuf)-2] = '\0'; // 去掉szLineBuf最后的“\r\n” vFileLine.push_back(szLineBuf); } fclose(fp); return 0; } else { return -1; } } // demo int main(void) { vector<string> vFileLine; if ( 0 == ReadFileLine(".\\test.txt", vFileLine) ) { for ( int i=0; i<(int)vFileLine.size(); ++i ) { printf("[%s]\n", vFileLine[i].c_str()); } printf("count:[%d]\n", vFileLine.size()); } printf("=====================================================\n"); vector<string> vFileNameList; if ( 0 == RecursiveEnumFile(".\\test", vFileNameList) ) { for ( int i=0; i<(int)vFileNameList.size(); ++i ) { printf("[%s]\n", vFileNameList[i].c_str()); } printf("count:[%d]\n", vFileNameList.size()); } getchar(); return 0; }

     


    最新回复(0)