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 的十六进制值为 0xCCCC,这似乎表明它尚未初始化。函数调用可能失败。FindFirstFile检查and的返回代码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_FILE_ATTRIBUTE_DATA 而不是 WIN32_FIND_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 回答