ファイル情報の表示(C言語)

キーワード:

CreateFile, GetFileInformationByHandle, FileTimeToLocalFileTime, FileTimeToSystemTime, CloseHandle

コード:

void DoGetFileInfoByHandle()
{
	HANDLE hFile;
	BY_HANDLE_FILE_INFORMATION fi;
	FILETIME ft;

	hFile = CreateFile(
		"c:\\command.com",
		0,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);

	GetFileInformationByHandle(hFile, &fi);

	printf("属性:\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) printf("アーカイブ\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) printf("圧縮\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) printf("ディレクトリ\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) printf("隠しファイル/ディレクトリ\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_NORMAL) printf("ノーマル\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_READONLY) printf("書込み禁止\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) printf("システム\n");
	if(fi.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) printf("一時ファイル/ディレクトリ\n");

	FileTimeToLocalFileTime(&fi.ftCreationTime, &ft);
	FileTimeToSystemTime(&ft, &st);
	printf("作成時刻: %04d/%02d/%02d %02d:%02d:%02d.%d\n",
		st.wYear, st.wMonth, st.wDay,
		st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

	FileTimeToLocalFileTime(&fi.ftLastAccessTime, &ft);
	FileTimeToSystemTime(&ft, &st);
	printf("最終アクセス時刻: %04d/%02d/%02d %02d:%02d:%02d.%d\n",
		st.wYear, st.wMonth, st.wDay,
		st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

	FileTimeToLocalFileTime(&fi.ftLastWriteTime, &ft);
	FileTimeToSystemTime(&ft, &st);
	printf("最終書き込み時刻: %04d/%02d/%02d %02d:%02d:%02d.%d\n",
		st.wYear, st.wMonth, st.wDay,
		st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

	printf("ボリュームのシリアルナンバー: %ud\n", fi.dwVolumeSerialNumber);
	printf("ファイルサイズ: %ud*2^32+%ud\n", fi.nFileSizeHigh, fi.nFileSizeLow);
	printf("リンク数: %d\n", fi.nNumberOfLinks);
	printf("ファイルID: %08X%08X", fi.nFileIndexHigh, fi.nFileIndexLow);

	CloseHandle(hFile);
}
(original text:1998/05/12 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。