在windows 7中使用windows.h更改C++中的文件创建日期



我有以下代码:

int main(int argc, char** argv) {
    onelog a;
    std::cout << "a new project";
    //creates a file as varuntest.txt
    ofstream file("C:\users\Lenovo\Documents\varuntest.txt", ios::app);
    SYSTEMTIME thesystemtime;
    GetSystemTime(&thesystemtime);
    thesystemtime.wDay = 07;//changes the day
    thesystemtime.wMonth = 04;//changes the month
    thesystemtime.wYear = 2012;//changes the year
    //creation of a filetimestruct and convert our new systemtime
    FILETIME thefiletime;
    SystemTimeToFileTime(&thesystemtime,&thefiletime);
    //getthe handle to the file
    HANDLE filename = CreateFile("C:\users\Lenovo\Documents\varuntest.txt", 
                                FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ|FILE_SHARE_WRITE,
                                NULL, OPEN_EXISTING, 
                                FILE_ATTRIBUTE_NORMAL, NULL);
    //set the filetime on the file
    SetFileTime(filename,(LPFILETIME) NULL,(LPFILETIME) NULL,&thefiletime);
    //close our handle.
    CloseHandle(filename);

    return 0;
}

现在的问题是;它只会在我检查文件属性时更改修改日期。我需要问;

如何更改文件的创建日期而不是修改日期

感谢

请给这个新手一些代码。

它设置上次修改的时间,因为这是您要求它做的。该函数接收3个文件时间参数,而您只向最后一个参数lpLastWriteTime传递了一个值。要设置创建时间,请调用以下函数:

SetFileTime(filename, &thefiletime, (LPFILETIME) NULL,(LPFILETIME) NULL);

我建议您阅读SetFileTime的文档。关键部分是其签名,如下所示:

BOOL WINAPI SetFileTime(
  __in      HANDLE hFile,
  __in_opt  const FILETIME *lpCreationTime,
  __in_opt  const FILETIME *lpLastAccessTime,
  __in_opt  const FILETIME *lpLastWriteTime
);

既然你说你是Windows API的新手,我就给你一个提示。MSDN上的文档非常全面。每当遇到Win32 API调用时,请在MSDN上查找它。

以及对你的代码的一些评论:

  • 您应该始终检查任何API调用的返回值。如果您错误地调用了这些函数,或者它们由于其他原因而失败,您将发现如果不进行错误检查,就不可能找出问题所在
  • 您调用的filename变量实际上应该命名为fileHandle

最新更新