如何修改文本文件的 "Date modified" 属性 而不影响使用 C++ 的内容?

How to modify a text file's "Date modified" property without affecting the content using c++?

我正在对我的一种方法进行单元测试。 select 将文件 select 放入结果向量的方法的一个标准是文件是最近几个小时的更新。 但是,为了确保每当我 运行 测试时都有有效结果,我需要至少保留一个文件 "up to date"。

除了尝试将文件复制到临时文件并将其写回原始文件外,是否知道如何解决此问题

编辑: 我正在使用 VS2013 C++,我的 OS 是 windows 7.

来自代码

如果您需要从代码本身设置 if,请参阅 SuperUser 网站上 Fredrik Mörk 的回答(已接受的回答):

Using copy command to just change the time and date of a file on Windows OS

Fredrik Mörk 回答的文本副本:

如果您想自己编写代码,.NET 提供了 File.SetLastAccessTimeFile.SetCreationTimeFile.SetLastWriteTime 方法。

来自外部工具

如果您需要从外部工具设置它,例如 cmd.exe,请参阅 SuperUser 站点上 Gish Domains 的回答:

Using copy command to just change the time and date of a file on Windows OS

link 的文本副本:

如果要使用 windows 修改文件的日期戳,请在命令提示符下使用以下命令:

copy /b filename.ext +,,

(其中 filename.ext 是您的文件名)。 +, 是要复制的特殊标志,告诉它只需更新文件上的 date/time:

  • 更改文件的时间和日期

如果要在不修改文件的情况下将当前时间和日期分配给文件,请使用以下语法:

copy /b Source+,,

逗号表示省略了 Destination 参数。

根据 Lumi 和 Justin 的评论进行编辑:将其放入批处理文件中,例如。 touch.cmd

@COPY /B %1+,, %1

即使文件不在当前目录中也能正常工作(在 Windows 7 上测试)。

由于问题有 c++ 标签并且您使用的是 Windows,您可以打开文件并更改它的最后修改时间 属性 使用此代码:

HANDLE hFile = CreateFile("c:\test.txt", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile != INVALID_FILE_HANDLE)
{
    FILETIME filetime;
    SYSTEMTIME systemfile;

    GetSystemTime(&systemfile);
    SystemTimeToFileTime(&systemfile, &filetime);
    SetFileTime(hFile, NULL, NULL, &filetime);
    CloseFile(hFile);
}

要在任何平台上将修改后的日期和时间更新为当前时间:

// #include <stdio.h>
FILE* pFile = fopen("filepath.txt", "ab");
if (pFile)
  fclose(pFile);

或者,作为使用 STL 的单行代码:

// #include <fstream>
std::fstream("filepath.txt", std::ios::out | std::ios::app | std::ios::binary).close();