21xrx.com
2025-03-22 08:03:28 Saturday
文章检索 我的文章 写文章
C++如何获取文件的创建时间、修改时间和访问时间
2023-06-24 08:28:13 深夜i     --     --
C++ 获取 文件 创建时间 修改时间 访问时间

在许多C++项目中,获取文件的创建时间、修改时间和访问时间是一个基本的需求。这些信息可以帮助程序员判断文件是否被更新或者是否被其他应用程序使用。因此,在该语言中,有多种方法可以获取这些属性。

首先,我们可以使用C++17中新加入的std::filesystem库来进行操作。这个库提供了多种函数来获取文件属性,包括文件的创建时间、修改时间和访问时间。具体如下:

1. 使用函数std::filesystem::file_time_type来获取文件时间信息:

std::filesystem::file_time_type ctime = std::filesystem::last_write_time("myfile.txt");
std::filesystem::file_time_type mtime = std::filesystem::last_write_time("myfile.txt");
std::filesystem::file_time_type atime = std::filesystem::last_write_time("myfile.txt");

其中,ctime表示文件创建时间,mtime表示文件修改时间,atime表示文件访问时间。

值得注意的是,file_time_type实际上是一个std::chrono::time_point类型的别名,因此它还可以使用std::chrono库中的函数进行时间转换。

2. 使用函数std::filesystem::status来获取文件的属性:

std::filesystem::file_status status = std::filesystem::status("myfile.txt");
auto ctime = std::filesystem::last_write_time(status); // 文件创建时间
auto mtime = std::filesystem::last_write_time(status); // 文件修改时间
auto atime = std::filesystem::last_write_time(status); // 文件访问时间

这种方式会返回一个std::filesystem::file_status对象,其中包含了文件的所有属性,例如文件的大小、修改时间等。然后,我们可以通过调用last_write_time函数来获取文件的相关时间信息。

除了使用std::filesystem库外,我们还可以使用Windows API来获取文件的创建时间、修改时间和访问时间。Windows API提供了多个函数来进行文件操作,其中包括获取文件属性的操作。例如:

#include <Windows.h>
#include <iostream>
// 获取文件时间
bool getFileTime(const std::string& fileName, FILETIME& createTime, FILETIME& modifyTime, FILETIME& accessTime)
{
  HANDLE hFile = CreateFileA(fileName.c_str(), GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
  if (hFile == INVALID_HANDLE_VALUE)
    return false;
  
  bool ret = GetFileTime(hFile, &createTime, &accessTime, &modifyTime) == TRUE;
  CloseHandle(hFile);
  return ret;
}
int main()
{
  std::string fileName = "myfile.txt";
  FILETIME createTime, modifyTime, accessTime;
  if (getFileTime(fileName, createTime, modifyTime, accessTime))
    std::cout << "Create Time: " << createTime << std::endl;
    std::cout << "Modify Time: " << modifyTime << std::endl;
    std::cout << "Access Time: " << accessTime << std::endl;
  
  return 0;
}

这里使用了Windows API中的CreateFile函数和GetFileTime函数来获取文件属性。CreateFile函数会返回文件句柄,然后通过GetFileTime函数获取文件时间属性。

总的来说,C++提供了多种方式来获取文件的创建时间、修改时间和访问时间。如果您使用的是C++17,那么std::filesystem库是一个不错的选择;如果您需要跨平台,可以使用Boost.Filesystem库或Qt的QFile类等;如果您是在Windows上编写程序,那么Windows API也是一种可行的选择。希望本篇文章能对您有所帮助!

  
  

评论区

    相似文章