VC++;:如何获取文件的时间和日期? < P>如何在C++中获得文件的文件大小和日期戳,给定其路径?

VC++;:如何获取文件的时间和日期? < P>如何在C++中获得文件的文件大小和日期戳,给定其路径?,c++,windows,file,date,size,C++,Windows,File,Date,Size,,并且可以使用FielBaseCINFO检索此信息。< /P> 这两个函数都有一个句柄,因此在调用这些函数之前,需要在路径上使用CreateFile // Error handling removed for brevity HANDLE hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); LARGE

,并且可以使用FielBaseCINFO检索此信息。< /P> 这两个函数都有一个句柄,因此在调用这些函数之前,需要在路径上使用CreateFile

// Error handling removed for brevity
HANDLE hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ,
                 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

LARGE_INTEGER fileSize;
GetFileSizeEx(hFile, &fileSize);

FILE_BASIC_INFO fileInfo);
GetFileInformationByHandle(hFile, FileBasicInfo, fileInfo, sizeof(fileInfo));

// fileInfo.CreationTime is when file was created.

如果你想要便携性,你也可以使用。Windows仍然支持它的使用。

要附加另一个答案,只需调用以获取文件时间。这个API还需要一个句柄,我认为它比GetFileInformationByHandle API更容易。顺便说一句,GetFileInformationByHandleEx仅在VISTA及更高版本中受支持

您可以使用
FindFirstFile()
同时获取这两个文件,而无需打开它(这是
GetFileSize()
GetInformationByHandle()
所必需的)。然而,这有点费劲,所以一个小包装是有帮助的

bool get_file_information(LPCTSTR path, WIN32_FIND_DATA* data)
{
  HANDLE h = FindFirstFile(path, &data);
  if(INVALID_HANDLE_VALUE != h) {
    return false;
  } else {
    FindClose(h);
    return true;
  }
}

然后,文件大小在
nFileSizeHigh
nFileSizeLow
成员中可用,时间戳在
ftCreationTime
ftLastAccessTime
ftLastWriteTime
成员中可用。

我发誓这个api存在,但我对GetFileTimes(注意s)的搜索没有结果。接得好。反正我的答案更应该是你的补充。我认为你的答案更完整,这就是我投票支持你的原因。你的例子中有三个错误,应该注意如何解码时间戳:call FileTimeToSystemTime。无论如何,谢谢。匆忙写作!现在已修复。:-)