5

私は次のコードを持っています:

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

さて、問題は次のとおりです。ファイルのプロパティを確認したときにのみ、変更日が変更されます。私は尋ねる必要があります。

変更日ではなく、ファイルの作成日を変更するにはどうすればよいですか?

ありがとう

この初心者のためにいくつかのコードを教えてください。

4

1 に答える 1

6

それがあなたがそれをするように頼んだので、それは最後に変更された時間を設定します。この関数は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
);

あなたはWindowsAPIの初心者だと言っているので、ヒントを提供します。MSDNのドキュメントは非常に包括的です。Win32 API呼び出しで行き詰まったときはいつでも、MSDNで調べてください。

そしてあなたのコードに関するいくつかのコメント:

  • API呼び出しの戻り値を常に確認する必要があります。関数を誤って呼び出したり、他の理由で失敗したりすると、エラーチェックなしで何がうまくいかなかったのかを突き止めることができなくなります。
  • 呼び出す変数にfilenameは、実際には。という名前を付ける必要がありますfileHandle
于 2012-04-06T09:36:23.167 に答える