地图没有返回正确的数字

时间:2011-09-30 15:09:27

标签: windows visual-c++

我有一张正在行动但没有返回正确号码的地图。它确实没有,现在它只是没有回来。任何帮助表示赞赏。谢谢。

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 个答案:

答案 0 :(得分:1)

请注意,GetFileList()会返回地图中的项目数。

在您的实施中,它是累积的。也许你想在连续调用GetFileList()之间清除地图。

答案 1 :(得分:0)

确定找到了解决方案。就是这样。

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...........