2011-09-28 52 views
0

我试图将文件大小添加到此地图。看起来我正在搞一堆东西。任何帮助表示赞赏。谢谢。添加到地图

int GetFileList(const wchar_t *searchkey, std::map<std::wstring, std::wstring> &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); 
     map[fd.cFileName] = buf; 
    map[fd.nFileSizeHigh] = buf; 
    map[fd.nFileSizeLow] = buf; 
if(FindNextFile(h, &fd) == FALSE) 
     break; 
    } 
    return map.size(); 
} 

void main() 
{ 
    std::map<std::wstring, std::wstring> map; 
    int count = GetFileList(L"C:\\Users\\DS\\Downloads\\*.zip", map) 
    && GetFileList(L"C:\\Users\\DS\\Downloads\\*.txt", map); 
    for(std::map<std::wstring, std::wstring>::const_iterator it = map.begin(); 
      it != map.end(); ++it) 
    { 
     //MessageBoxW(NULL,it->first.c_str(),L"File Name",MB_OK); 
    //MessageBoxW(NULL,it->second.c_str(),L"File Date",MB_OK); 

    } 
} 
+0

它是文件的大小或文件的修改时间? –

+0

我想得到两个,但在这一点上大小会做。谢谢。 –

+0

你从未接受过答案。回去做吧。 –

回答

2

那么,你需要决定你要映射什么,以及你要映射到什么。

也许你想从文件名映射到结构{文件大小,文件时间}。

保持它类似代码:

struct file_data 
{ 
    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; 
    GetFileList(L"C:\\Users\\DS\\Downloads\\*.zip", map); 
    GetFileList(L"C:\\Users\\DS\\Downloads\\*.txt", map); 

    for(std::map<std::wstring, file_data>::const_iterator it = map.begin(); 
     it != map.end(); ++it) 
    { 
     MessageBoxW(NULL,it->first.c_str(),L"File Name",MB_OK); 
     MessageBoxW(NULL,it->second.sLastAccessTime.c_str(),L"File Date",MB_OK); 
    } 

    return 0; 
} 
+0

谢谢莉奥我会试试看。嘿,你和我的朋友有相同的名字! :) –