文件的查找与遍历
1、遍历 C:\Windows 目录下的所有文件,并打印出哪些有只读属性,哪些有隐藏属性,哪些有系统属性?
2、将1的结果输出到文件;
3、递归遍历 C:\Windows 目录及其子目录,将结果输出到文件。
参考文章 : https://blog.csdn.net/qq_28901541/article/details/96116472
#define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <tchar.h> #include <iostream> #include <fstream> #include "atlbase.h" #include "atlstr.h" using namespace std; BOOL Traverse_File(LPCTSTR lpPath,LPCTSTR lpType) { TCHAR Path[MAX_PATH] = { 0 }; _stprintf(Path,_T("%s//%s"),lpPath,lpType); WIN32_FIND_DATAW FindData = { 0 }; HANDLE hFind = FindFirstFile(Path, &FindData); if (hFind == INVALID_HANDLE_VALUE) return FALSE; BOOL bRet = NULL; do { bRet = FindNextFile(hFind, &FindData); if (!bRet) break; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (_tcscmp(FindData.cFileName, _T(".")) == 0 || _tcscmp(FindData.cFileName, _T("..")) == 0) continue; cout << "Folder Name:\t"; wcout << FindData.cFileName; cout << " ------"; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) cout << " " << "ReadOnly"<< " "; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) cout << " " << "Hidden" << " "; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) cout << "System"; cout << endl; } else { cout << "File Name:\t"; wcout << FindData.cFileName; cout << " ------"; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) cout << " " << "ReadOnly" << " "; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) cout << " " << "Hidden" << " "; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) cout << "System"; cout << endl; } } while (bRet); FindClose(hFind); return TRUE; } char* W_To_A(WCHAR* t_string) { CW2A w2aObj(t_string); char* temp = (char*)w2aObj; return temp; } std::string unicode2gbk(std::wstring str_unicode) { if (str_unicode.size() <= 0) return std::string(""); int gbk_len = WideCharToMultiByte(CP_ACP, 0, str_unicode.c_str(), str_unicode.size(), NULL, 0, NULL, NULL); if (gbk_len <= 0) return std::string(""); char* lpsz_m = nullptr; try { lpsz_m = new char[gbk_len + 2]; memset(lpsz_m, 0, (gbk_len + 2) * sizeof(char)); } catch (bad_alloc& e) { cout << "unicode2gbk : " << e.what() << endl; return std::string(""); } int nRtn = WideCharToMultiByte(CP_ACP, 0, str_unicode.c_str(), str_unicode.size(), lpsz_m, gbk_len, NULL, NULL); if (nRtn != gbk_len) { delete[] lpsz_m; return std::string(""); } std::string str_gbk; str_gbk = lpsz_m; delete[] lpsz_m; return str_gbk; } void EnumFiles_2(LPCTSTR lpszParentPath, LPCTSTR lpFileType) { TCHAR Path[MAX_PATH] = { 0 }; _stprintf(Path, _T("%s\\%s"), lpszParentPath, lpFileType); WIN32_FIND_DATAW FindData = { 0 }; HANDLE hFind = FindFirstFile(Path, &FindData); fstream fs; fs.open("D:\\1.txt"); if (!fs) return; if (hFind != INVALID_HANDLE_VALUE) { BOOL bFind = FALSE; do { bFind = FindNextFile(hFind, &FindData); if (!bFind) break; string tempStr; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (_tcscmp(FindData.cFileName, _T(".")) == 0 || _tcscmp(FindData.cFileName, _T("..")) == 0) continue; tempStr += "Folder Name:\t"; tempStr += unicode2gbk(FindData.cFileName); tempStr += " ------"; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { tempStr += " ReadOnly "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) { tempStr += " System "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { tempStr += " Hidden"; } tempStr += "\n"; } else { tempStr += "File Name:\t"; tempStr += unicode2gbk(FindData.cFileName); tempStr += " ------"; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { tempStr += " ReadOnly "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) { tempStr += " System "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { tempStr += " Hidden"; } tempStr += "\n"; } if (tempStr.size() > 0) fs << tempStr.c_str(); } while (bFind); } fs.close(); FindClose(hFind); } void EnumFiles_3(LPCTSTR lpszParentPath, LPCTSTR lpFileType) { if (!lpszParentPath || _tcslen(lpszParentPath) <= 0 || !lpFileType || _tcslen(lpFileType) <= 0) return; TCHAR Path[MAX_PATH] = {0}; _stprintf(Path, _T("%s\\%s"), lpszParentPath, lpFileType); ofstream fs; fs.open("D:\\1.txt", ios::out | ios::app); //ios::app 追加模式。所有写入都追加到文件末尾。 //ios::ate 文件打开后定位到文件末尾。 //ios::in 打开文件用于读取。 //ios::out 打开文件用于写入。 //ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0 if (!fs) return; WIN32_FIND_DATAW FindData = { 0 }; HANDLE hFind = FindFirstFile(Path, &FindData); if (hFind == INVALID_HANDLE_VALUE) return; BOOL bFind = 0; do { bFind = FindNextFile(hFind, &FindData); if (!bFind) break; string FindName; CW2A Fn(FindData.cFileName); if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (_tcscmp(FindData.cFileName, _T(".")) == 0 || _tcscmp(FindData.cFileName, _T("..")) == 0) continue; FindName += "Folder Name: \t"; FindName += Fn; FindName += "\t------"; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { FindName += " ReadOnly "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { FindName += " Hidden "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) { FindName += " System"; } FindName += "\n"; TCHAR szPath[MAX_PATH] = { 0 }; _stprintf(szPath, _T("%s\\%s"), lpszParentPath, FindData.cFileName); EnumFiles_3(szPath, lpFileType); } else { FindName += "File Name:\t"; FindName += Fn; FindName += "\t------"; if (FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { FindName += " ReadOnly "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { FindName += " Hidden "; } if (FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) { FindName += " System"; } FindName += "\n"; } if (FindName.size() > 0) fs << FindName.c_str(); } while (bFind); fs.close(); FindClose(hFind); } int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, INT nCmdShow) { //Traverse_File(_T("C:\Windows"),_T("*.*")); return 0; } int main() { //Write_To_File(_T("D:\\1.txt"), _T("C:\Windows"), _T("*.*")); //EnumFiles_2(_T("C:\Windows"), _T("*.*")); EnumFiles_3(_T("C:\\Windows"), _T("*.*")); return 0; }
浙公网安备 33010602011771号