c++ - 如何在 C++ 中为 Windows 7 x64 的特定文件提取 "Date column"值

标签 c++ windows date stat

我想提取特定文件的日期 值,并将其与 Visual C++ 中的修改日期和创建日期进行比较。

我看到我可以提取创建日期修改日期,但我对日期一无所知。

我用有缺陷的软件更改了一些文件,唯一仍然有效的列是日期。我怎样才能提取它?

我使用的是 Windows 7 x64。

在这里,我只看到了st_atime、st_ctime、st_mtime: http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx

最佳答案

Windows 为每个文件或文件夹存储三个时间戳:

  • 创建时间(项目首次创建的时间/日期)
  • 最后修改时间(文件最后写入的时间)
  • Last access time(上次访问文件的时间)

有多种方法可以读取这些时间戳,但使用 native Win32 API,您可以执行以下操作:

LPCWSTR pszFileName = L"c:\\path\\to\\myfile.txt";
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(pszFileName, &wfd);
if (hFind != INVALID_HANDLE_VALUE)
{
    FindClose(hFind);
    // timestamps can now be found at:
    // wfd.ftCreationTime
    // wfd.ftLastAccessTime
    // wfd.ftLastWriteTime
}

您可以使用 FileTimeToSystemTime() 之类的函数将 FILETIME 值(它只是自特定日期以来的滴答计数)转换为更有用的 SYSTEMTIME 提供日、月、年、小时、分钟等的结构

注意:文件夹和文件的“上次修改时间”也会更新,并指示文件最后一次直接在该文件夹内修改的时间。对文件夹时间戳的更改不会传播到父文件夹。

注意 2:“上次访问时间”或多或少已被弃用,并且在较新版本的 Windows 中默认禁用。您可以使用注册表设置启用它。

关于c++ - 如何在 C++ 中为 Windows 7 x64 的特定文件提取 "Date column"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18169654/

相关文章:

c++ - 有没有办法不延迟地播放声音?

ios - 从 Swift 的 TimeInterval 中删除时间组件?

C++:if 内部循环的性能影响

c++ - 使用我的 DLL 的应用程序中新建/删除的奇怪问题

c# - 使用 C# 在 Windows 上检测防病毒

windows - 如何在 Windows 上使用 Anaconda 安装 ipdb?

javascript - 同时使用力矩和力矩 tz

java - 计算在 android 2.2 的日历 View 中显示的第一天

c++ - 当该槽中没有输入时如何使数组打印零

c++ - 算术右移给出虚假结果?