0

ファイルの最終書き込み日を取得したい。このコードを作成しましたが、常に「Year」のような値で52428が返されます。

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

4 に答える 4

6

52428の16進値は0xCCCCであり、初期化されていないことを示しているようです。関数呼び出しはおそらく失敗しています。FindFirstFileおよびからの戻りコードを確認します(エラーコードが見つからなかったFileTimeToSystemTime場合は呼び出します)。GetLastError

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

の呼び出しが成功した後、リソースのリークを回避するためFindFirstFileに、コードにはハンドルを使用した対応する呼び出しが必要であることに注意してください。FindClose

于 2011-09-22T15:43:40.270 に答える
5

この関数のドキュメントを確認してください!それはあなたに次のことを伝えます:

関数が成功した場合、戻り値はゼロ以外です。

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

戻り値がゼロ以外であるかどうかを確認してください。ゼロでない場合は、getlasterrorを呼び出して、コンソールにそのエラーメッセージを出力し、この情報を提供してください。

于 2011-09-22T15:45:08.797 に答える
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);
    }
于 2011-09-22T15:51:03.570 に答える
0

ファイルパスに円記号'\'を使用しないでください。これによりファイルパスが修正される場合、FindFirstFile API呼び出しが成功する可能性があり、必要な時間が得られます。

于 2011-09-23T06:03:22.437 に答える