Win32API ファイルの情報を取得する GetFileInformationByHandle

ファイルの情報を取得する


使用するAPI

  • GetFileInformationByHandle
  • //ファイル情報を取得し、コンソールに表示する
    
    
    #include <windows.h>
    
    void PrintFileTimeByLocalTime(const FILETIME *lpFileTime, 
    			const char *lpTitle)
    {
    	FILETIME localFileTime;
    	SYSTEMTIME systemTime;
    	static char *dayOfWeek[] = 
    		{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    
    	FileTimeToLocalFileTime(lpFileTime, &localFileTime);
    	FileTimeToSystemTime(&localFileTime, &systemTime);
    
    	printf("%s = ", lpTitle);
    	printf("%04d/%02d/%02d %02d:%02d:%02d.%03d (%s)\n",
    		systemTime.wYear,
    		systemTime.wMonth,
    		systemTime.wDay,
    		systemTime.wHour,
    		systemTime.wMinute,
    		systemTime.wSecond,
    		systemTime.wMilliseconds,
    		dayOfWeek[systemTime.wDayOfWeek]);
    }
    
    void PrintFileAttributes(DWORD dwAttributes)
    {
    	printf("FileAttributes = ");
    	if (dwAttributes & FILE_ATTRIBUTE_ARCHIVE) {
    		printf("Archive ");
    	}
    	if (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) {
    		printf("Directory ");
    	}
    	if (dwAttributes & FILE_ATTRIBUTE_HIDDEN) {
    		printf("Hidden ");
    	}
    	if (dwAttributes & FILE_ATTRIBUTE_NORMAL) {
    		printf("Normal ");
    	}
    	if (dwAttributes & FILE_ATTRIBUTE_READONLY) {
    		printf("Readonly ");
    	}
    	if (dwAttributes & FILE_ATTRIBUTE_SYSTEM) {
    		printf("System ");
    	}
    	if (dwAttributes & FILE_ATTRIBUTE_TEMPORARY) {
    		printf("Temporary ");
    	}
    	putc('\n', stdout);
    }
    
    int main()
    {
    	HANDLE hFile;
    	BY_HANDLE_FILE_INFORMATION fileInformation;
    	char *lpFileName = "test.txt";
    
    	hFile = CreateFile(lpFileName,
    		GENERIC_READ,
    		FILE_SHARE_READ,
    		NULL,
    		OPEN_EXISTING,
    		FILE_ATTRIBUTE_NORMAL,
    		NULL);
    
    	if (hFile == INVALID_HANDLE_VALUE) {
    		printf("CreateFile failed\n");
    		return 1;
    	}
    
    	GetFileInformationByHandle(hFile, &fileInformation);
    	CloseHandle(hFile);
    
    	//FileTimes
    	PrintFileTimeByLocalTime(
    		&fileInformation.ftCreationTime, "CreationTime");
    	
    	PrintFileTimeByLocalTime(
    		&fileInformation.ftLastAccessTime, "LastAccessTime");
    	
    	PrintFileTimeByLocalTime(
    		&fileInformation.ftLastWriteTime, "LastWriteTime");
    
    
    	//FileAttributes
    	PrintFileAttributes(fileInformation.dwFileAttributes);
    	
    	//VolumeSerialNumber
    	printf("VolumeSerialNumber = %u\n", 
    		fileInformation.dwVolumeSerialNumber);
    
    	//FileSize
    	printf("FileSizeLow = %u, FileSizeHigh = %u\n", 
    		fileInformation.nFileSizeLow, 
    		fileInformation.nFileIndexHigh);
    
    	//FileIndex
    	printf("FileIndexLow = %u, FileIndexHigh = %u\n", 
    		fileInformation.nFileIndexLow, 
    		fileInformation.nFileIndexHigh);
    
    	//NumberOfLinks
    	printf("NumberOfLinks = %u\n", 
    		fileInformation.nNumberOfLinks);
    
    	return 0;
    }