各位达人,我在基于SDI的程序的VIEW中输入了一些文字内容,并作为文件保存下来!现在想按时间查找这些文件!用CFILEFIND可以实现按文件名查找,现在我用DATE TIME PICKER控件指定一个时间段,想将这个时间段中的文件查找出来,该怎么实现?

解决方案 »

  1.   

    GetFileInformationByHandle里面可以得到文件建立的时间
      

  2.   

    CFile file;
    CFileStatus status;
    file.GetStatus("c:\\test.txt",status);
    CTime ct=status.m_ctime;
    CString text;
    text.Format("创建时间:%d-%02d-%02d %02d:%02d:%02d",ct.GetYear(),ct.GetMonth(),ct.GetDay(),ct.GetHour(),ct.GetMinute(),ct.GetSecond());
    AfxMessageBox(text);
      

  3.   

    // hFile     文件句柄
    // lpszString - 指向接受时间的字符串指针BOOL GetCreationTime(HANDLE hFile, LPCSTR lpszString)
    {
        FILETIME ftCreate, ftAccess, ftWrite;
        SYSTEMTIME stUTC, stLocal;    // Retrieve the file times for the file.
        if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
            return FALSE;    // Convert the last-write time to local time.
        FileTimeToSystemTime(&ftCreate, &stUTC);
        SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);    // Build a string showing the date and time.
        wsprintf(lpszString, "%02d/%02d/%d  %02d:%02d",
            stLocal.wDay, stLocal.wMonth, stLocal.wYear,
            stLocal.wHour, stLocal.wMinute);    return TRUE;
    }
      

  4.   

    要把LPCSTR lpszString改为LPTSTR lpszString
      

  5.   

    我想将C盘下符合查询条件时间的文件列出来,建立了一个Dialog,在上面放置了两个Date Time Picker还有一个ListBox,我写了如下代码:
    void CTimeDlg::OnOK() 
    {        // TODO: Add extra validation here
    UpdateData();
    WIN32_FIND_DATA fd;
    m_list.ResetContent();
    CString m_file = "c:\\*.*";
    HANDLE hd = ::FindFirstFile((LPCTSTR)m_file,&fd);
    CFile file;
    CFileStatus status;
    CString str = "c:\\";
    str += fd.cFileName;
    file.GetStatus(str,status);
    if (status.m_ctime > m_Begintime && status.m_ctime < m_Endtime)
    {
    m_list.AddString(fd.cFileName);
    }
    while (FindNextFile(hd,&fd))
    {
    if (status.m_ctime > m_Begintime && status.m_ctime < m_Endtime)
    {
    m_list.AddString(fd.cFileName);
    }
    这样能编译通过,可是执行的效果却不对,请各位大侠指点一下迷津!

    }
      

  6.   

    下面的程序应该可以,m_Begintime和m_Endtime是和Date Time Picker控件的变量,是CTime类型的          UpdateData(); m_list.ResetContent();
    WIN32_FIND_DATA FileData;
    HANDLE hSearch;
    TCHAR   szFile2Find[]=_T("C:\\*.*");
    DWORD dwAttrs=0; hSearch=::FindFirstFile(szFile2Find, &FileData); 
    if (hSearch == INVALID_HANDLE_VALUE) 

    AfxMessageBox(_T("找不到文件。")); 
    return;
    } dwAttrs=::GetFileAttributes(FileData.cFileName); 
    if(!(FileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
    {
    CTime tCreation(FileData.ftCreationTime);
    if(tCreation>m_Begintime&&tCreation<m_Endtime)
    m_list.AddString(FileData.cFileName);
    } while(1)
    {
    if (!FindNextFile(hSearch, &FileData)) 
    {
    if (GetLastError() == ERROR_NO_MORE_FILES) 

    AfxMessageBox(_T("没有文件了") );
    break;

    } if(FileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
             continue; CTime tCreation(FileData.ftCreationTime);
    if(tCreation>m_Begintime&&tCreation<m_Endtime)
    m_list.AddString(FileData.cFileName);
    }
      

  7.   

    你使用函数GetFileTime就可以得到你的文件的一系列的时间了。
      

  8.   

    谢谢AkiraChing和wangjinwang,同时也谢谢zbc和DeautyFan的关注,问题解决了!