2011-09-30 65 views
0

我正在搜索文件。我需要將搜索時間從當前時間(文件時間)調整爲當前時間(文件時間),而不是一分鐘。我將如何做到這一點。這是我迄今爲止。謝謝。調整搜索時間

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; 
GetFileList(L"C:\\Users\\DS\\Downloads\\*.jpg", map); 
GetFileList(L"C:\\Users\\DS\\Downloads\\*.txt", map); 
int count = GetFileList(L"C:\\Users\\DS\\Downloads\\*.pdf", map); 

for(std::map<std::wstring, file_data>::const_iterator it = map.begin(); 
    it != map.end(); ++it) 
{ 
+0

我想獲取不到一分鐘的文件。謝謝。 –

+0

很不清楚。使用SystemTimeToFileTime並從中減去60 * 1000 * 10000LL。這是一分鐘前的FILETIME。 –

+0

現在我正在從目錄中獲取所有pdf,txt和jpg文件。但我只想要那些不到一分鐘或更短的那些。或者我們應該說一分鐘或更少的年輕人! –

回答

2

使用GetSystemTimeAsFileTime來得到當前時間FILETIME格式。減去6000000000時間回到一分鐘。使用CompareFileTime將每個文件的時間與該值進行比較。

+0

聽起來不錯!我對此有點新鮮。你有沒有一個例子,在代碼中它會去哪裏?謝謝,雷蒙德。 –

+1

我當時希望這個微調足以讓你閱讀更多的文檔。 'FILETIME ftNow; GetSystemTimeAsFileTime(&ftNow); auto ftAs64 = ftOneMinuteAgo.dwLowDateTime +((unsigned __int64)ftOneMinuteAgo.dwHighDateTime << 32) - 6000000000UL; FILETIME ftOneMinuteAgo = {(DWORD)ftAs64,(DWORD)(ftAs64 >> 32)};'這是前兩句的解決方案。我會讓你嘗試解決第三個問題。 –

+0

謝謝雷蒙德。你的輕推確實奏效。我搜索並閱讀。我很欣賞這些意見。我是一名VB程序員,我剛剛開始學習C++,這與我使用的非常不同!我會試圖找出其餘的...... –