Вся информация в ResourcesMap разбита на части, когда речь идет о каталогах и именах файлов. Я не могу разобраться. когда шаг за шагом, я не вижу ошибок. Но при проверке информации в ResourcesMap все это испортилось.
Похоже, что процесс копирования что-то не так?
Это рекурсивная функция, которая сопоставляет имя ресурса с файловой структурой.
struct RESOURCE {
char Name[MAX_PATH] = { NULL };
int Level = 0;
bool operator<(const RESOURCE& other) const
{
//write your compare function here...
return (strcmp(Name, other.Name) < 0);
}
};
struct RESOURCEFILE {
char FileName[MAX_PATH] = { NULL };
DWORD ATTRIBUTE = 0;
};
map <RESOURCE, RESOURCEFILE> ResourcesMap;
void PolulateResources(HWND hDlg , RESOURCE Resource, RESOURCEFILE File) {
WIN32_FIND_DATA ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
wchar_t FileName[MAX_PATH] = { NULL };
mbstowcs(FileName, File.FileName, MAX_PATH);
hFind = FindFirstFile(FileName, &ffd);
do {
if (INVALID_HANDLE_VALUE != hFind) {
switch (ffd.dwFileAttributes) {
case FILE_ATTRIBUTE_DIRECTORY: {
char temp[MAX_PATH] = { NULL };
wcstombs(temp, ffd.cFileName, MAX_PATH);
File.ATTRIBUTE = ffd.dwFileAttributes;
if (strcmp(temp, ".") != 0 && strcmp(temp, "..") != 0) {
strcpy(Resource.Name, temp);
AddItemToTree(GetDlgItem(hDlg, IDC_TREE1), temp, Resource.Level, g_nOpen, g_nClosed);
File.FileName[strlen(File.FileName) - 1] = NULL;
strcat(File.FileName, temp);
ResourcesMap[Resource] = File;
strcat(File.FileName, "\\*");
int SaveLevel = Resource.Level++;
PolulateResources(hDlg, Resource, File);
File.FileName[strlen(File.FileName) - strlen(temp) - 1] = NULL;
Resource.Level = SaveLevel;
}
}break;
case FILE_ATTRIBUTE_NORMAL:
case FILE_ATTRIBUTE_ARCHIVE:
case FILE_ATTRIBUTE_READONLY:
case FILE_ATTRIBUTE_HIDDEN: {
//Resource->Level++;
char temp[MAX_PATH] = { NULL };
wcstombs(temp, ffd.cFileName, MAX_PATH);
File.ATTRIBUTE = ffd.dwFileAttributes;
strcpy(Resource.Name, temp);
if (strstr(File.FileName, "\\*") != NULL) {
File.FileName[strlen(File.FileName) - 1] = NULL;
strcat(File.FileName, temp);
ResourcesMap[Resource] = File;
File.FileName[strlen(File.FileName) - strlen(temp)] = NULL;
strcat(File.FileName, "*");
}
else {
ResourcesMap[Resource] = File;
}
AddItemToTree(GetDlgItem(hDlg, IDC_TREE1), temp, Resource.Level, g_nDocument, g_nOpen);
}break;
}
}
} while (FindNextFile(hFind, &ffd) != 0);
}