VC++ 獲取文件屬性創建時間、修改時間和訪問時間


轉載:http://blog.sina.com.cn/s/blog_66bf8d8301014ikd.html

WIN32_FIND_DATA結構

  關於文件的全部屬性信息,總計有以下以下9 種:文件的標題名、文件的屬性(只讀、存檔,隱藏等)、文件的創建時間、文件的最后訪問時間、文件的最后修改時間、文件大小的高位雙字、文件大小的低位雙字、保留、保留。在這里只有文件標題名和文件的長度可以通過CFile類比較方便的獲得,而對於其他幾種屬性的獲取和設置就無能為力了。

  在用findfirst()和findnext()函數去查找磁盤文件時經常使用的一個數據結構WIN32_FIND_DATA的成員變量里包含了以上所有的文件屬性,因此可以通過這個結構作為獲取和更改文件屬性的手段。該結構的內容如下:

typedef struct _WIN32_FIND_DATA {
  DWORD dwFileAttributes; //文件屬性
  FILETIME ftCreationTime; // 文件創建時間
  FILETIME ftLastAccessTime; // 文件最后一次訪問時間
  FILETIME ftLastWriteTime; // 文件最后一次修改時間
  DWORD nFileSizeHigh; // 文件長度高32位
  DWORD nFileSizeLow; // 文件長度低32位
  DWORD dwReserved0; // 系統保留
  DWORD dwReserved1; // 系統保留
  TCHAR cFileName[ MAX_PATH ]; // 長文件名
  TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;

可以通過FindFirstFile()函數根據當前的文件存放路徑查找該文件來把待操作文件的相關屬性讀取到WIN32_FIND_DATA結構中去:

WIN32_FIND_DATA ffd ;
HANDLE hFind = FindFirstFile("c:\test.dat",&ffd);

在使用這個結構時不能手工修改這個結構中的任何數據,結構對於開發人員來說只能作為一個只讀數據,其所有的成員變量都會由系統完成填寫。

實例:

//--get the LastWriteTime of folder/files
WIN32_FIND_DATA ffd ;
HANDLE hFind = FindFirstFile(openedSourceDir,&ffd);
SYSTEMTIME stUTC, stLocal;
FileTimeToSystemTime(&(ffd.ftLastWriteTime), &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
myTime.Format("%d. %d %d, %d:%d", stLocal.wDay,stLocal.wMonth,stLocal.wYear,stLocal.wHour,stLocal.wMinute);
//--
d_ColorStatic.SetWindowText((LPCTSTR)myTime);

 

2. 獲取文件屬性創建時間、修改時間和訪問時間

轉載:http://blog.csdn.net/awu999328/article/details/24470621

 1 FILETIME ftCreate, ftModify, ftAccess;
 2  CString strCreateTime, strModifyTime, strAccessTime;
 3  CString strFilePath = _T("");
 4 
 5  HANDLE hFile = CreateFile(strFilePath, GENERIC_READ,          // open for reading
 6   FILE_SHARE_READ,       // share for reading
 7   NULL,                            // default security
 8   OPEN_EXISTING,          // existing file only
 9   FILE_FLAG_BACKUP_SEMANTICS , // normal file
10   NULL);
11 
12  SYSTEMTIME stLocal;
13  if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftModify))
14  {
15   return ;
16  }
17 
18  ZeroMemory(&stLocal, sizeof(SYSTEMTIME));
19  FileTimeToSystemTime(&ftCreate, &stLocal);
20  strCreateTime.Format("%04d-%02d-%02d %02d:%02d:%02d", stLocal.wYear, stLocal.wMonth, stLocal.wDay,  stLocal.wHour, stLocal.wMinute, stLocal.wSecond);   // 文件創建時間
21  ZeroMemory(&stLocal, sizeof(SYSTEMTIME));
22  FileTimeToSystemTime(&ftModify, &stLocal);
23  strModifyTime.Format("%04d-%02d-%02d %02d:%02d:%02d", stLocal.wYear, stLocal.wMonth, stLocal.wDay,  stLocal.wHour, stLocal.wMinute, stLocal.wSecond); //  文件修改時間
24  ZeroMemory(&stLocal, sizeof(SYSTEMTIME));
25  FileTimeToSystemTime(&ftAccess, &stLocal);
26  strAccessTime.Format("%04d-%02d-%02d %02d:%02d:%02d", stLocal.wYear, stLocal.wMonth, stLocal.wDay,  stLocal.wHour, stLocal.wMinute, stLocal.wSecond); // 文件訪問時間

 

這里的CreateFile只導致文件只能被只讀打開,不能有其他權限,最好用FindFile獲取創建,修改和訪問時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM