我想检索文件的最后写日期。我已经为它编写了这段代码,但它总是在“年”这样的值中返回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;
答案 0 :(得分:6)
52428的十六进制值为0xCCCC,这似乎表明它尚未初始化。函数调用可能失败了。检查FindFirstFile
和FileTimeToSystemTime
的返回代码(然后在找不到错误代码后调用GetLastError
)。
编辑根据对OP的编辑,FindFirstFile调用可能是失败的调用。返回值是句柄(不是零/非零结果)。代码应将结果分配给HANDLE
类型的变量,然后与INVALID_HANDLE_VALUE
进行比较。
请注意,在成功调用FindFirstFile
后,代码应该对FindClose
进行相应的调用,并使用句柄来避免资源泄漏。
答案 1 :(得分:5)
请查看此功能的文档! 它告诉你以下内容:
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。
尝试检查返回值是否为非零,如果不是,请尝试调用getlasterror并在控制台上打印该错误消息并提供此信息。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
你不应该在文件路径中使用反斜杠'\'吗?如果这会纠正您的文件路径,则FindFirstFile API调用可能会成功,并为您提供所需的时间。