[Win32 API] File Information 확인 (1)
저장소/VC++파일 정보를 확인해야 할 일이 얼마나 있을까?
그나마 많이 확인하는 것이 Attribute나 Size, Version 이정도?
혹시나 필요할 일이 생길까 싶어서 정리한다.
for문과 같은 처리는 파일 정보가 여러 언어로 되어있을 때 확인하기 위해 사용되는건가?
GetFileVersionInfoSizeEx와 GetFileVersionInfoEx에 첫 번째 인자로 Flag를 받게끔 되어있는데 이와 연관되어있을듯 하다.
MSDN을 대충 해석하고 참고해서 만든 것인데 아무래도 설명이 필요할 것 같다.
GetFileVersionInfoSizeEx와 GetFileVersionInfoEx에 대한 내용을 포함해서 나머지 부분은 다음에 다시...
그나마 많이 확인하는 것이 Attribute나 Size, Version 이정도?
혹시나 필요할 일이 생길까 싶어서 정리한다.
#include이렇게 하면 몇몇 정보는 얻어올 수 있지만 파일 등록정보에서 확인할 수 있는 모든 정보를 확인하지는 못한다.#pragma comment(lib, "version.lib") #include typedef struct _Lang_And_Code_Page { WORD wLanguage; WORD wCodePage; } LANGANDCODEPAGE, *LPLANGANDCODEPAGE; int GetFileInformation(LPCTSTR _lpszFilePath, LPCTSTR _lpszInfoString, LPTSTR _lpszBuf, DWORD _cchBuf) { if( NULL == _lpszFilePath || NULL == _lpszInfoString || NULL == _lpszBuf ) { return -1; } DWORD dwHandle = 0; DWORD dwSize = 0; dwSize = ::GetFileVersionInfoSize(_lpszFilePath, &dwHandle); if(0 == dwSize) return -1; BYTE* pBlockData = new BYTE[dwSize]; ZeroMemory(pBlockData, dwSize); if(FALSE == ::GetFileVersionInfo(_lpszFilePath, dwHandle, dwSize, pBlockData)) { delete [] pBlockData; return -1; } UINT uLangCodePage = 0; LPLANGANDCODEPAGE pLangCodePage = NULL; if(FALSE == ::VerQueryValue(pBlockData, _T("\\VarFileInfo\\Translation"), (LPVOID*)&pLangCodePage, &uLangCodePage)) { delete [] pBlockData; return -1; } // int nRet = 0; TCHAR szResource[50] = {0,}; TCHAR* pszBuffer = NULL; UINT uBufSize = 0; for(UINT i = 0 ; i < (uLangCodePage / sizeof(LANGANDCODEPAGE)) ; i++ ) { StringCchPrintf(szResource, 50, _T("\\StringFileInfo\\%04x%04x\\%s"), pLangCodePage[i].wLanguage, pLangCodePage[i].wCodePage, _lpszInfoString); if(::VerQueryValue(pBlockData, szResource, (LPVOID*)&pszBuffer, &uBufSize)) StringCchCopy(_lpszBuf, _cchBuf, pszBuffer); else nRet = -1; } delete [] pBlockData; return nRet; }
for문과 같은 처리는 파일 정보가 여러 언어로 되어있을 때 확인하기 위해 사용되는건가?
GetFileVersionInfoSizeEx와 GetFileVersionInfoEx에 첫 번째 인자로 Flag를 받게끔 되어있는데 이와 연관되어있을듯 하다.
MSDN을 대충 해석하고 참고해서 만든 것인데 아무래도 설명이 필요할 것 같다.
GetFileVersionInfoSizeEx와 GetFileVersionInfoEx에 대한 내용을 포함해서 나머지 부분은 다음에 다시...
'저장소 > VC++' 카테고리의 다른 글
Delay Load 관련 내용 (0) | 2011.04.27 |
---|---|
[Win32 API] File Version 확인 (0) | 2011.02.22 |
[Win32 API] 가변인자 처리 방식, 그리고 오류 (0) | 2011.02.14 |
[MFC] Modaless Dailog - Itself destroy (0) | 2011.02.14 |
[MFC] Esc Key 또는 Return Key에 의해 Dialog가 닫힐 때 처리 방법 (0) | 2011.01.26 |