パスを指定して、C++ で Windows 上のファイルのファイル サイズと日付スタンプを取得するにはどうすればよいですか?
4 に答える
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.
移植性を探している場合は、POSIX statを使用することもできます。Windows は引き続きその使用をサポートしています。
他の回答を追加するには、GetFileTimeを呼び出してファイル時間だけを取得します。この 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;
}
}
次に、ファイル サイズはWIN32_FIND_DATAnFileSizeHigh
のおよびnFileSizeLow
メンバーで使用でき、タイムスタンプはおよびメンバーで使用できます。ftCreationTime
ftLastAccessTime
ftLastWriteTime