21xrx.com
2025-06-23 09:58:47 Monday
文章检索 我的文章 写文章
C++ 获取文件最后修改时间
2023-07-10 13:15:18 深夜i     25     0
C++ 文件 最后修改时间

在C++编程语言中,获取文件的最后修改时间是一个常见的需求。获取文件最后修改时间可以用于检查文件是否被修改过,或者判断文件是否过期。

C++中可以使用Windows API的GetFileTime函数获取文件的创建时间、最后访问时间和最后修改时间。该函数的声明如下:

BOOL GetFileTime(
 HANDLE   hFile,
 LPFILETIME lpCreationTime,
 LPFILETIME lpLastAccessTime,
 LPFILETIME lpLastWriteTime
);

其中,参数hFile表示要获取时间信息的文件句柄;参数lpCreationTime、lpLastAccessTime和lpLastWriteTime分别表示要获取的创建时间、最后访问时间和最后修改时间。这些时间信息都是通过FILETIME结构来传递的。FILETIME结构包含两个DWORD成员,表示文件时间的UTC时间值;它们可以通过Windows API的FileTimeToSystemTime函数转换为本地时间值。

下面是一个获取文件最后修改时间的示例:

#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
  HANDLE hFile = CreateFile(TEXT("test.txt"), GENERIC_READ, FILE_SHARE_READ, NULL,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  if (hFile == INVALID_HANDLE_VALUE)
    cerr << "Error: Unable to open file." << endl;
    return 1;
  
  FILETIME ftCreate, ftAccess, ftWrite;
  if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite)) {
    cerr << "Error: Unable to get file time." << endl;
    CloseHandle(hFile);
    return 1;
  }
  SYSTEMTIME stUTC, stLocal;
  FileTimeToSystemTime(&ftWrite, &stUTC);
  SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
  cout << "Last write time: ";
  cout << stLocal.wYear << "-" << stLocal.wMonth << "-" << stLocal.wDay << " ";
  cout << stLocal.wHour << ":" << stLocal.wMinute << ":" << stLocal.wSecond << endl;
  CloseHandle(hFile);
  return 0;
}

这个程序打开了一个名为test.txt的文件,并获取了它的最后修改时间。它首先使用CreateFile函数打开文件,获取文件句柄。然后使用GetFileTime函数获取文件的创建时间、最后访问时间和最后修改时间。接着,使用FileTimeToSystemTime函数将最后修改时间转换为本地时间值。最后,输出最后修改时间的年、月、日、时、分、秒。这个程序的输出如下:

Last write time: 2021-11-10 15:19:18

通过上面的示例,我们可以很容易地获取文件的最后修改时间,并用于自己的编程项目中。

  
  

评论区