VC 遍歷資料夾所有檔名,程式碼簡短。下面函式是獲取YY賬號,(對xml的解析操作)
#include <filesystem> #include <string> #include <vector> #include "tinyxml.h" using namespace std; using namespace std::tr2::sys; string ReadData(const char* str);
BOOL DirectoryList(); int main() { vector<string> fileLists; string path = "C:\\Users\\Administrator\\AppData\\Roaming\\duowan\\yy\\mainframe\\account\\"; directory_iterator it(path); while (it != directory_iterator()){ string tmp = it->path().string(); string fullpath = path + tmp; fileLists.push_back(fullpath);
++it; } for (size_t i = 0;i < fileLists.size();i++) { string uniqueid = ReadData(fileLists[i].c_str()); cout<<uniqueid<<endl; } getchar(); return 0; } string ReadData(const char* str) { TiXmlDocument xdoc; if (!xdoc.LoadFile(str)) { return "LoadFile fail"; } TiXmlElement* filexml = xdoc.RootElement(); if (filexml == NULL) { cout<<"RootElement fail"<<endl; } TiXmlElement* xname = filexml->FirstChildElement("name"); TiXmlElement* uniqueid = filexml->FirstChildElement("uniqueid"); std::string uni = uniqueid->GetText(); return uni; } BOOL DirectoryList() { LPCWSTR Path = L"C:\\Users\\Administrator\\AppData\\Roaming\\duowan\\yy\\mainframe\\account\\*.*"; WIN32_FIND_DATA FindData; HANDLE hError; int FileCount = 0;
hError = FindFirstFile(Path, &FindData); if (hError == INVALID_HANDLE_VALUE) { printf("搜尋失敗!"); return FALSE; } BOOL filebool = TRUE; wchar_t FullPathName[MAX_PATH] = {0}; while(hError && filebool) { if (wcscmp(FindData.cFileName, L".") == 0 || wcscmp(FindData.cFileName, L"..") == 0 ) { filebool = ::FindNextFile(hError, &FindData); continue; } cout<<FindData.cFileName<<endl; wsprintf(FullPathName, L"%s\\%s", Path,*FindData.cFileName); FileCount++; cout<<FullPathName<<endl; filebool = ::FindNextFile(hError, &FindData);
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { //DirectoryList(FullPathName); } } FindClose(hError); cout<<FileCount<<endl; return TRUE; }