2009-04-30 6 views
0

winapi関数を使って信頼できるタイムスタンプを取得できないようです。例えば:のようなwinapi - 非センスファイルのタイムスタンプ?

 
int main(int argc, char *argv[]) 
{ 
HANDLE file; 
BY_HANDLE_FILE_INFORMATION finfo; 
SYSTEMTIME systime; 

file = CreateFile("test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
GetFileInformationByHandle(file,&finfo); 
FileTimeToSystemTime(&finfo.ftLastWriteTime, &systime); 
printf(" %s %02d:%02d:%02d %d/%d/%d\n", "test.txt", systime.wHour,systime.wMinute,systime.wSecond,systime.wDay,systime.wMonth,systime.wYear); 
} 

すべての私のファイル上の非感覚を与える:

 
test.txt 00:03:30 33/5/3 

wDayは1〜31の範囲外の値を持っているようだし、時間と日付は完全に間違っています。名前とサイズのようなBY_HANDLE_FILE_INFORMATIONの他のすべての値は正しいです。完全なコードでは、すべての関数のエラーをチェックしますが、すべてが返されます。誰でも私が間違っていることを知っていますか?

答えて

0

私は問題がfilesize.QuadPartのあなたの使用であると思う。書式文字列と引数リストの両方からその文字列を削除して、それが機能するかどうか確認してください。

これが役立つ場合は、printf()の64ビット数量に使用する正しいフォーマット文字列を参照してください。

+0

申し訳ありませんが、私はコードをrelaventだけに削減しようとしましたが、その部分に何も問題はありません LARGE_INTEGERファイルサイズ; filesize.LowPart = finfo.nFileSizeLow; filesize.HighPart = finfo.nFileSizeHigh; ファイルサイズが正しく報告されます。 – Myforwik

+0

さて、あなたのprintfステートメントのfilesize.QuadPartをfilesize.LowPartに変更してみてください。 –

+0

filesize.LowPartに切り替えると%lldを%dに置き換えます。 – Michael