代码之家  ›  专栏  ›  技术社区  ›  Qwertie

如何获取文件的时间和日期?

  •  3
  • Qwertie  · 技术社区  · 16 年前

    如何在C++中获得文件的文件大小和日期戳,并给出它的路径?

    4 回复  |  直到 16 年前
        1
  •  3
  •   DannyT    15 年前

    你可以使用 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 成员 WIN32_FIND_DATA ,时间戳在 ftCreationTime , ftLastAccessTime ftLastWriteTime 成员。

        2
  •  3
  •   Matthew Iselin    16 年前

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

        3
  •  3
  •   Michael    16 年前

    GetFileSize / GetFileSizeEx GetFileInformationByHandleEx WITH 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
  •  3
  •   Shane Powell    16 年前

    要附加另一个答案,您可以调用 GetFileTime 只获取文件时间。这个API还需要一个句柄,我认为它比GetFileInformationByHandle API更简单。btw getfileinformationbyhandleex仅在Vista和更高版本中受支持。