Карта не возвращает правильные номера - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть карта, которая работает и не возвращает правильный номер.Так и было, и не вернулось.Любая помощь приветствуется.Спасибо.

struct file_data 
{ 
    std::wstring sLastAccessTime; 
    __int64 nFileSize      ; 
};

int GetFileList(const wchar_t *searchkey, std::map<std::wstring, file_data> &map) 
{ 
    WIN32_FIND_DATA fd; 
    HANDLE h = FindFirstFile(searchkey,&fd); 
    if(h == INVALID_HANDLE_VALUE) 
    { 
        return 0; // no files found 
    } 

    while(1) 
    { 
        wchar_t buf[128]; 
        FILETIME ft = fd.ftLastWriteTime; 
        SYSTEMTIME sysTime; 
        FileTimeToSystemTime(&ft, &sysTime); 
        wsprintf(buf, L"%d-%02d-%02d",sysTime.wYear, sysTime.wMonth, sysTime.wDay); 

        file_data filedata; 
        filedata.sLastAccessTime= buf; 
        filedata.nFileSize      = (((__int64)fd.nFileSizeHigh) << 32) + fd.nFileSizeLow; 

        map[fd.cFileName]= filedata; 

        if (FindNextFile(h, &fd) == FALSE) 
            break; 
    } 
    return map.size(); 
} 

int main() 
{ 
    std::map<std::wstring, file_data> map; 
    int count = GetFileList(L"C:\\Users\\DS\\Downloads\\*.pdf", map); 
    int count1 = GetFileList(L"C:\\Users\\DS\\Downloads\\*.txt", map); 
    int count2 = GetFileList(L"C:\\Users\\DS\\Downloads\\*.jpg", map);

    for(std::map<std::wstring, file_data>::const_iterator it = map.begin(); it != map.end(); ++it) 
    {
        if (count2 != 0) 
        { 
            printf("\n   How Many: %i   \n", count2);
        } 
        else 
        { 
            printf ("%s \n", "Nothing");
        } 
        return 0; 
    }
}

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Обратите внимание, что GetFileList() возвращает количество элементов на карте.

В вашей реализации это накопительно. Может быть, вы хотите очистить карту между последовательными вызовами на GetFileList().

0 голосов
/ 01 октября 2011

ОК нашел решение.Вот и все.

GetFileList(L"C:\\Users\\DS\\Downloads\\*.pdf", map);
GetFileList(L"C:\\Users\\DS\\Downloads\\*.txt", map);
GetFileList(L"C:\\Users\\DS\\Downloads\\*.jpg", map);

if( map.size() > 0 
  then...........
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...