c++filedatetimefile-properties

Changing the File Creation Date in C++ using windows.h in Windows 7


I have the following code:

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;
}

Now the question is; it only changes the modified date when I check the properties of the file. I need to ask;

How to change the file's creation date instead of the modification date?

Thanks

Please give some code for this novice.


Solution

  • It sets the last modified time because that's what you asked it to do. The function receives 3 filetime parameters and you only passed a value to the final one, lpLastWriteTime. To set the creation time call the function like this:

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

    I suggest you take a read of the documentation for SetFileTime. The key part is its signature which is as follows:

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

    Since you say that you are a novice with the Windows API I'll give you a tip. The documentation on MSDN is very comprehensive. Whenever you get stuck with a Win32 API call, look it up on MSDN.

    And some comments on your code: