gpt4 book ai didi

c++ - 使用 win32 读取子目录

转载 作者:行者123 更新时间:2023-11-28 06:21:48 24 4
gpt4 key购买 nike

我正在尝试读取一些具有 win32 函数的子目录,它看起来像这样。大多数一切正常。我还没有完全运行这个函数,因为我还在调试它。我的问题:我有 5 个实际文件和两个子目录。当我尝试获取目录中每个子目录和文件的文件名时,我得到:“.”、“..”、“Subdirectory1”、“子目录”、“其余文件”...为什么我得到一个句点,两个句点,然后文件夹中的实际文件?

static std::vector<std::string> ReadAllFilesIntoArray(std::string contentDirPath, std::string fileType)
{
std::vector<std::string> filePaths;
std::wstring strTemp;
strTemp.assign(contentDirPath.begin(), contentDirPath.end());
HANDLE hFile = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA FindFileData;
hFile = FindFirstFile(strTemp.c_str(), &FindFileData);
if (INVALID_HANDLE_VALUE != hFile)
{
int i = 0;
do{
// If it's a directory
if (FILE_ATTRIBUTE_DIRECTORY & FindFileData.dwFileAttributes)
{
// Convert wchar[260] -> std::string
char ch[260];
char DefChar = ' ';
WideCharToMultiByte(CP_ACP, 0, FindFileData.cFileName, -1, ch, 260, &DefChar, NULL);
std::string ss(ch);

std::vector<std::string> localFilePaths = ReadAllFilesIntoArray(contentDirPath.assign(contentDirPath.begin(), contentDirPath.end() - 5) + ss + "//*", fileType);
// Append the file paths found in the subdirectory to the ones found in the current directory
filePaths.insert(filePaths.begin(), localFilePaths.begin(), localFilePaths.end());
}

// Convert wchar[260] -> std::string
char ch[260];
char DefChar = ' ';
WideCharToMultiByte(CP_ACP, 0, FindFileData.cFileName, -1, ch, 260, &DefChar, NULL);
std::string tempString(ch);

// Then add to list if it's equal to the file type we are checking for
if (tempString.substr(tempString.size() - 3, tempString.size()) == fileType)
{
filePaths.resize(i + 1);
filePaths[i] = ch;
i++;
}
} while (FindNextFile(hFile, &FindFileData));

FindClose(hFile);
}

return filePaths;
}

最佳答案

它们是代表当前目录(.)和父目录(..)的特殊名称。枚举代​​码通常编写有特殊情况检查以忽略这两个特殊值。

关于c++ - 使用 win32 读取子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29192379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com