C++ System Time返回相同的错误值

Jan*_*man 0 c++ winapi systemtime

我想检索文件的最后写日期.我已经为它编写了这段代码,但它总是以"年"这样的值返回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;
Run Code Online (Sandbox Code Playgroud)

Mar*_*ins 6

52428的十六进制值是0xCCCC,这似乎表明它尚未初始化.函数调用可能失败了.检查返回代码FindFirstFileFileTimeToSystemTime(然后GetLastError在找不到错误代码后调用).

编辑 根据对OP的编辑,FindFirstFile调用可能是失败的调用.返回值是句柄(不是零/非零结果).代码应该将结果分配给类型的变量,HANDLE然后进行比较INVALID_HANDLE_VALUE.

另请注意,在成功调用之后FindFirstFile,代码应该FindClose与句柄进行相应的调用以避免资源泄漏.


小智 5

请查看此功能的文档!它告诉你以下内容:

如果函数成功,则返回值为非零值.

如果函数失败,则返回值为零.要获取扩展错误信息,请调用GetLastError.

尝试检查返回值是否为非零,如果不是,请尝试调用getlasterror并在控制台上打印该错误消息并提供此信息.