代码如下:
void CLogtoolDlg::OnButton() 
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
m_OpenPath = _T("C:");
CFileDialog  dlg(TRUE, _T("txt"), NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT,
_T("ファイル(*.txt)|*.txt")); char szFileNameBuffer[10000] = {0};      // ファイル名を保存させる為のバッファ
dlg.m_ofn.lpstrFile = szFileNameBuffer;  // バッファの割り当て
dlg.m_ofn.nMaxFile = 10000;              // 最大文字数設定
dlg.m_ofn.nFilterIndex = m_iFileIdx;
dlg.m_ofn.lpstrInitialDir = m_OpenPath;
  
CFileStatus status;
CString acTime;
CString b;
CString c;
CFile::GetStatus(szFileNameBuffer,status);
//acTime = status.m_ctime.Format("Start: %Y-%m-%d %H:%M:%S:%M"); 
acTime.Format("Start: %d-%d-%d %d:%d:%d",status.m_ctime.GetYear(),status.m_ctime.GetMonth(),status.m_ctime.GetDay(),status.m_ctime.GetHour(),status.m_ctime.GetMinute(),status.m_ctime.GetSecond());  b = status.m_atime.Format("ATime: %Y-%m-%d %H:%M:%S:%M");
c = status.m_mtime.Format("MTime: %Y-%m-%d %H:%M:%S:%M");
if(dlg.DoModal() == IDOK) 
{
CFile file(szFileNameBuffer,CFile::modeRead);
char* pBuf;
CString str;
DWORD dwFileLen;
dwFileLen=file.GetLength();
pBuf=new char[dwFileLen+1];
pBuf[dwFileLen]=0;
file.Read(pBuf,dwFileLen);
file.Close();
/* BY_HANDLE_FILE_INFORMATION   fiBuf;     
            FILETIME   ftBuf;     
            SYSTEMTIME   stBuf;     
         char   msg[40];     
GetFileInformationByHandle(szFileNameBuffer, &fiBuf   );     
            FileTimeToLocalFileTime(   &fiBuf.ftLastWriteTime,   &ftBuf   );     
            FileTimeToSystemTime(   &ftBuf,   &stBuf   );     
            wsprintf(   msg,   "Last   write   time   is   %d:%d   %d/%d/%d",     
            stBuf.wHour,stBuf.wMinute,stBuf.wMonth,stBuf.wDay,stBuf.wYear   );     
::MessageBox(   NULL,   msg,   NULL,   MB_OK   );*/
str.Format("%s",pBuf); GetDlgItem(IDC_EDIT1)->SetWindowText("2.000\r\n"+acTime+"\r\n"+b+"\r\n"+c+"\r\n\r\n\r\n"+str);    delete []pBuf;
Invalidate();
}
}
运行exe程序,打开文件后结果如下:2.000
Start: 1970-3-5 7:59:35
ATime: 1970-03-25 19:31:05:31
MTime: 1970-03-08 08:48:44:48
sfsfsd sdf scxvxcvxvxvx
再次打开此文件结果如下:2.000
Start: 2033-9-14 4:26:15MTime: 2033-09-12 07:12:00:12
sfsfsd sdf scxvxcvxvxvx
请问,时间不对这个问题出在什么地方??系统时间不对??还是怎么个情况??
第二次打开该文件, ATime 为什么不显示??
还有一点,我想得到秒后面的 毫秒 ,在status.m_mtime.Format中可以吗??

解决方案 »

  1.   

    use   CFile::GetStatus():  
       
      CFileStatus   status;  
      char*   pFileName   =   "test.dat";  
      if(   CFile::GetStatus(   pFileName,   status   )   )       //   static   function  
      {  
      //m_*time   is   of   type   of   CTime  
      status.m_ctime;//The   date   and   time   the   file   was   created.    
      status.m_mtime;//The   date   and   time   the   file   was   last   modified.    
      status.m_atime;//The   date   and   time   the   file   was   last   accessed   for   reading.    
      status.m_size;//The   logical   size   of   the  
       
      }
      

  2.   

    可以试试使用 FindFirstFile 查找文件,然后从 WIN32_FIND_DATA 结构中获取文件的时间。也可以使用 CFileFind 类。
      

  3.   

    第一次CFile::GetStatus(szFileNameBuffer,status); // szFileNameBuffer是空的
    第二次GetFileInformationByHandle(szFileNameBuffer, &fiBuf  ); // 第一个参数要求是文件句柄,不是文件名
    呵呵,看到日文本来讨厌不想回的,又看了代码好笑,给鬼子作东西别忘了留点后门。不过以你这水平,够呛。
      

  4.   

    GetStatus中使用的szFileNameBuffer参数要给一个文件名才行,GetFileInformationByHandle要给一个文件句柄(不然为何叫ByHandle而不叫ByName)。
      

  5.   

    谢谢你们,我水平确实不好,让你们见笑了……
    还是谢谢你们的帮助,
    我把得到文件时间属性那段移到 if(dlg.DoModal() == IDOK) 这里面来了,然后再前面加了一句 str1=file.GetFilePath();然后CFile::GetStatus(str1,status);结果好像没问题了。
    其实我对于Windows一窍不通,本来只对C还算熟悉,C++都不算明白,特别是MFC编程,刚学不到2个月,甚至连句柄还没太弄明白,由于这项目需要用MFC做个东西,所以没办法,边做边学,现学现卖了……
    不过幸好还有这个论坛,有你们这些热心的人帮我,就算再可笑,再低级的问题,我也不怕,只要不明白,我就贴出来问,并且向你们虚心学习,直到弄明白为止。
    最后再真心的说一次谢谢你们!
      

  6.   

    dou是我向日本人学习
    日本人不会向我学习
      

  7.   

    我不是日本人啊,
    我挣日本人的钱而已,
    日本人的钱比较好挣,
    不怕你们笑话,
    就我这垃圾水平,
    一个月还1w5左右RMB,
    日本公司新人一般都这个工资水平