2017-07-18 19 views
-1

Cでファイルの作成日を取得するにはどうすればよいですか?私は機能getFileTimeを参照してくださいが、私は私が作成時間を返すためにそれを使用できるかわからない:ファイルの作成日を返すにはどうすればよいですか?

BOOL WINAPI GetFileTime(

__in  HANDLE hFile,    // handle to the file 
__out_opt LPFILETIME lpCreationTime, // FILETIME struct for creation time 
__out_opt LPFILETIME lpLastAccessTime, // FILETIME struct for last access time 
__out_opt LPFILETIME lpLastWriteTime // FILETIME struct for last modification time 
); 

//私は1601年1月1日を返し、それを仕事ONTこの1が、ドールを行います。私はありません日付の変更

HANDLE h_fichier; 
LPCWSTR fname = L"C:\\Program Files (x86)\\IE tn-Sign\\tn-Sign-plugin- ie.dll"; 
FILETIME date_fichier_tmp; 
SYSTEMTIME date_fichier_utc, date_fichier_local; 
//Ouverture du fichier 
h_fichier =  CreateFile(fname,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
if(h_fichier == INVALID_HANDLE_VALUE) 
    printf("CreateFile ko %S\n", fname); 
EstEID_log("CreateFile ko %S\n", fname); 
//Date de modification du fichier 
if (!GetFileTime(h_fichier, NULL, NULL, &date_fichier_tmp)) 
    printf("GetFileTime ko\n"); 
EstEID_log("GetFileTime ko\n"); 
//Convertion de la date 
FileTimeToSystemTime(&date_fichier_tmp, &date_fichier_utc); 
SystemTimeToTzSpecificLocalTime(NULL, &date_fichier_utc, &date_fichier_local); 
printf("Derniere modification le %02d-%02d-%d %02dh%02d\n", date_fichier_local.wDay, date_fichier_local.wMonth, date_fichier_local.wYear, date_fichier_local.wHour, date_fichier_local.wMinute); 

EstEID_log("Derniere modification le %02d-%02d-%d %02dh%02d\n", date_fichier_local.wDay, date_fichier_local.wMonth, date_fichier_local.wYear, date_fichier_local.wHour, date_fichier_local.wMinute); 
//Fermeture du fichier 
CloseHandle(h_fichier); 
system("pause"); 
return 0; 
+1

[mcve]を入力してください。 – IInspectable

答えて

0

GetFileTime() APIは、ファイルの作成、変更、およびアクセス時間を返し、時間の各種類のファイルシステムおよびオペレーティングシステムの取り扱いのサポート対象/日付の作成を行う必要があります日付。 GetFileTime functionの文書では、作成時刻が(ファイルハンドルの後の)最初のパラメータになります。あなたの既存のコールは、「最後の書き込み時間」(別名、修正時間)を取得しています。代わりにパラメータを返すように変更してください

… GetFileTime(h_fichier, &date_fichier_tmp, NULL, NULL) … 
+0

それは01/01/1601を返します。正しい日付に変換するにはどうすればいいですか? – halloulaguesmi

+0

'SystemTimeToTzSpecificLocalTime()'が失敗しているようです。これと 'FileTimeToSystemTime()'の戻り値を確認する必要があります。 'date_fichier_utc'の値を出力して、UTC時刻が何であるかを確認する必要があります(現地時間から数時間でなければなりません)。あなたの例が示す変更時刻は「合理的な」日付値を返しますか? – wrlee

+0

いいえ、変更時刻に同じものを返します – halloulaguesmi

関連する問題