16,472
社区成员
发帖
与我相关
我的任务
分享
WinExec("cmd /c dir /tw /o-d d:\\mydir\\*.* >d:\\files.txt",SW_HIDE);
//然后读文件d:\files.txt的内容
WinExec("cmd /c dir /b /s /o-d d:\\mydir\\*.* >d:\\allfiles.txt",SW_HIDE);
//然后读文件d:\allfiles.txt的内容
#include <vector>
// 文件信息结构体
struct FIleInfo
{
std::wstring szFileName;
std::wstring szFilePath;
std::wstring szCreateTime;
};
// 递归遍历所有文件
void find(LPCTSTR lpPath, std::vector<FIleInfo> &fileList)
{
std::wstring szFind(lpPath);
WIN32_FIND_DATA FindFileData;
szFind += _T("\\*.*");
HANDLE hFind = ::FindFirstFile(szFind.c_str(), &FindFileData);
if (INVALID_HANDLE_VALUE == hFind) return;
while (1)
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (FindFileData.cFileName[0] != '.')
{
std::wstring szPath(lpPath);
szPath += _T("\\");
szPath += FindFileData.cFileName;
find(szPath.c_str(), fileList );
}
}
else
{
std::wstring strFileName = FindFileData.cFileName; // 文件名
std::wstring suffixStr = strFileName.substr(strFileName.find_last_of('.') + 1);
if (suffixStr == _T("txt")) // 根据后缀选出自己感兴趣的文件,比如 txt文件,注意大小写,如果想不区分大小写,需要自己统一转化为大写或小写然后比较
{
FILETIME ft = FindFileData.ftCreationTime; // 取得创建时间
SYSTEMTIME st = { 0 };
TCHAR buf[64] = { 0 };
FileTimeToSystemTime(&ft, &st);
swprintf_s(buf, _T("%4d年-%02d月-%02d日 %02d:%02d:%02d"), st.wYear, st.wMonth, st.wDay, st.wHour+8 /*北京时间*/, st.wMinute ,st.wSecond);
std::wstring strFilePath = lpPath;
strFilePath += _T("\\");
strFilePath += FindFileData.cFileName; // 文件全路径名
FIleInfo fi;
fi.szFileName = strFileName;
fi.szFilePath = strFilePath;
fi.szCreateTime = buf;
fileList.push_back(fi);
}
}
if (!FindNextFile(hFind, &FindFileData)) break;
}
FindClose(hFind);
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<FIleInfo> fileList;
find(_T("D:\\xsmposc\\XSMPos"), fileList); // 取得文件信息,可自行插入列表框
return 0;
}