3

パスを指定して、C++ で Windows 上のファイルのファイル サイズと日付スタンプを取得するにはどうすればよいですか?

4

4 に答える 4

3

GetFileSize / GetFileSizeExおよびGetFileInformationByHandleEx と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.
于 2009-06-26T23:16:42.190 に答える
3

移植性を探している場合は、POSIX statを使用することもできます。Windows は引き続きその使用をサポートしています。

于 2009-06-26T23:19:23.213 に答える
3

他の回答を追加するには、GetFileTimeを呼び出してファイル時間だけを取得します。この API もハンドルが必要で、GetFileInformationByHandle API よりも簡単だと思います。ところで、GetFileInformationByHandleEx は VISTA 以降でのみサポートされています。

于 2009-06-26T23:22:59.977 に答える
3

を使用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_DATAnFileSizeHighのおよびnFileSizeLowメンバーで使用でき、タイムスタンプはおよびメンバーで使用できます。ftCreationTimeftLastAccessTimeftLastWriteTime

于 2009-06-26T23:24:01.833 に答える