我需要使用C++编写一个小程序它应该实现以下功能:1、可以检索指定路径中的指定扩展名的文件2、将所有检索到的文件集成到一个列表窗口中这个列表窗口会展示出每个文件的文件名、所在路径、文件大小、修改日期等信息3、在列表窗口中点击文件名所在的行时会自动打开目标文件所在的文件夹
以下是一个简单的实现,利用了Windows API来获取文件信息和打开文件夹:
#include
//获取文件大小(以字节为单位) long long getFileSize(const std::wstring& filePath) { HANDLE hFile = CreateFileW(filePath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { return -1; } LARGE_INTEGER fileSize; if (!GetFileSizeEx(hFile, &fileSize)) { CloseHandle(hFile); return -1; } CloseHandle(hFile); return fileSize.QuadPart; }
//获取文件修改日期 std::wstring getFileModifiedDate(const std::wstring& filePath) { HANDLE hFile = CreateFileW(filePath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { return L""; } FILETIME ft; if (!GetFileTime(hFile, NULL, NULL, &ft)) { CloseHandle(hFile); return L""; } CloseHandle(hFile); SYSTEMTIME st; if (!FileTimeToSystemTime(&ft, &st)) { return L""; } wchar_t buf[20]; swprintf_s(buf, L"%04d-%02d-%02d", st.wYear, st.wMonth, st.wDay); return buf; }
//打开文件所在文件夹 void openFileFolder(const std::wstring& filePath) { SHELLEXECUTEINFOW sei = { 0 }; sei.cbSize = sizeof(sei); sei.fMask = SEE_MASK_INVOKEIDLIST; sei.lpVerb = L"open"; sei.lpFile = filePath.c_str(); sei.lpParameters = L"/select,"" + filePath + L"""; sei.nShow = SW_SHOW; ShellExecuteExW(&sei); }
int wmain() { std::wstring path = L"C:\Users\User\Desktop\Test"; std::wstring ext = L".txt";
std::vector<std::wstring> filePaths;
WIN32_FIND_DATAW findData;
HANDLE hFind = FindFirstFileW((path + L"\\*" + ext).c_str(), &findData);
if (hFind != INVALID_HANDLE_VALUE) {
do {
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
filePaths.push_back(path + L"\\" + findData.cFileName);
}
} while (FindNextFileW(hFind, &findData));
FindClose(hFind);
}
std::wcout << L"文件数:" << filePaths.size() << std::endl;
for (const auto& filePath : filePaths) {
std::wcout << L"文件名:" << filePath.substr(path.size() + 1) << std::endl;
std::wcout << L"所在路径:" << path << std::endl;
std::wcout << L"文件大小:" << getFileSize(filePath) << L"字节" << std::endl;
std::wcout << L"修改日期:" << getFileModifiedDate(filePath) << std::endl;
std::wcout << std::endl;
}
std::wstring userInput;
std::getline(std::wcin, userInput);
if (!userInput.empty()) {
int selectedFileIndex = std::stoi(userInput) - 1;
if (selectedFileIndex >= 0 && selectedFileIndex < filePaths.size()) {
openFileFolder(filePaths[selectedFileIndex]);
}
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/bEgV 著作权归作者所有。请勿转载和采集!