2011-09-22 5 views
0

ファイルの最終書き込み日を取得したい。 52428用の六角値は、それが初期化されていない示しているようだ0xCCCC、あるC++システム時刻が同じ間違った値を返す

int LastErrorCode; 
LPCSTR Path = "C:/Users/Username/Desktop/Picture.PNG"; 
WIN32_FIND_DATA Information; 

if(!FindFirstFile(Path, &Information)) 
{ 
    int LastErrorCode = GetLastError(); 
    cout << "FIND FIRST FILE FAILED" << endl; 
    cout << LastErrorCode << endl; 
} 


SYSTEMTIME MyTime; 
FILETIME MyFileTime = Information.ftLastWriteTime; 


if(!FileTimeToSystemTime(&MyFileTime, &MyTime)) 
{ 
    LastErrorCode = GetLastError(); 
    cout << "FILE TIME TO SYSTEM TIME FAILED" << endl; 
    cout << LastErrorCode << endl; 
} 


cout << MyTime.wYear << endl; 

答えて

6

をすべての時間を、私はそれのために、このコードを書かれているが、それは「年」のような値で52428私を返します。関数呼び出しが失敗している可能性があります。 FindFirstFileFileTimeToSystemTimeの戻りコードを確認してから(エラーコードが見つからない場合はGetLastErrorに電話してください)。

編集 OPの編集に基づいて、FindFirstFile呼び出しが失敗する可能性があります。戻り値はハンドルです(ゼロ/非ゼロの結果ではありません)。コードは、結果をHANDLE型の変数に代入し、次にINVALID_HANDLE_VALUEと比較する必要があります。

FindFirstFileへの呼び出しが成功した後、コードにはリソースが漏れないように対応するFindCloseの対応するコールが必要です。

+0

ねえ。 FileTimeToSystemTimeが失敗し、 "The parameter is incorrect。"というエラーコード87が表示されます。何が悪いのか分かりません。 *回答のコードを更新しました – Janman

+0

@Janman:もう少し情報を追加しました。 FindFirstFileへの呼び出しが失敗していると思われます(結果は "ブール型"ではありません)。 –

5

この機能のドキュメントを確認してください。 次のように表示されます。

この関数が成功すると、戻り値はゼロ以外の値になります。

この関数が失敗すると、戻り値はゼロになります。拡張エラー情報を取得するには、GetLastErrorを呼び出します。

戻り値が0でない場合は、getlasterrorを呼び出してコンソールにそのエラーメッセージを出力し、この情報を提供するようにしてください。

+0

FileTimeToSystemTime()が失敗し、 "The parameter is incorrect。"というエラーコード87が表示されます。何が悪いのか分かりません。 *私は答えのコードを更新しました – Janman

+0

私はマークがソリューションを投稿したと思う:) – Thomas

1

以前は、WIN32_FIND_DATAの代わりにWIN32_FILE_ATTRIBUTE_DATAを使用しました。その後、ファイルの情報を取得するために、私はGetFileAttributesExを使用します。例は次のとおりです。

string strFile = "c:\\myfile.txt"; 

WIN32_FILE_ATTRIBUTE_DATA fileInfo; 
// Get the attributes structure of the file 
if (GetFileAttributesEx(strFile, 0, &fileInfo)) 
{ 
    SYSTEMTIME  stSystemTime; 
    // Convert the last access time to SYSTEMTIME structure: 
    if (FileTimeToSystemTime(&fileInfo.ftLastAccessTime, &stSystemTime)) 
    { 
     printf("Year = %d, Month = %d, Day = %d, Hour = %d, Minute = %d\n", stSystemTime.wYear, stSystemTime.wMonth, stSystemTime.wDay, stSystemTime.wHour, stSystemTime.wMinute); 
    } 
0

ファイルパスに '\'を使用しないでください。これがあなたのファイルパスを修正するならば、FindFirstFile API呼び出しは成功する可能性があり、必要な時間を得るでしょう。