【问题标题】:VC++: How to get the time and date of a file?VC++:如何获取文件的时间和日期?
【发布时间】:2009-06-26 23:14:40
【问题描述】:

在给定路径的情况下,如何使用 C++ 在 Windows 上获取文件的文件大小和日期戳?

【问题讨论】:

    标签: c++ windows file date size


    【解决方案1】:

    您可以使用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;
      }
    }
    

    那么文件大小在WIN32_FIND_DATAnFileSizeHighnFileSizeLow成员中可用,时间戳在ftCreationTimeftLastAccessTimeftLastWriteTime成员中可用。

    【讨论】:

    • 你的例子中有三个错误,需要注意如何解码时间戳:调用FileTimeToSystemTime。无论如何,谢谢。
    • 糟糕。写的匆忙!现在修好了。 :-)
    【解决方案2】:

    如果您正在寻找可移植性,您也可以使用POSIX stat。 Windows 仍然支持它的使用。

    【讨论】:

      【解决方案3】:

      GetFileSize/GetFileSizeExGetFileInformationByHandleEx 与 FileBasicInfo 可用于检索此信息。

      这两个函数都带有句柄,因此在调用这些函数之前,您需要在路径上使用 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.
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我发誓这个 api 存在,但我对 GetFileTimes(注意 s)的搜索一无所获。很好的收获。
        • 无论如何,我的回答更多是为了成为您的补充。我认为你的答案更完整,这就是我投票支持你的原因。
        猜你喜欢
        • 1970-01-01
        • 2017-12-16
        • 2010-09-19
        • 1970-01-01
        • 2011-10-24
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多