파일 버전을 얻는 프로그램이다.
작성일: 2009.04.13 (http://ospace.tistory.com/), ospace114@엠팔.컴
사용법은 다음과 같다.
// 현재 수행되는 프로그램이나 DLL 의 정보
CFileVersion fv;
if(!fv.update()) {
// error
}
cout << "version: " << fv.getVersion() << endl;
cout << "Major: " << fv.getMajor() <<", " << fv.getMinor() << endl;
다음은 다른 예제이다.
// 특정 위치의 파일에 대한 버전 정보
CFileVersion fv(".../foo.exe");
if(!fv.update()) {
// error
}
cout << "version: " << fv.getVersion() << endl;
cout << "Major: " << fv.getMajor() <<", " << fv.getMinor() << endl;
이상이다. 이외에 다른 정보를 추가로 더 추출할 수 있지만, 자세한 것은 MSDN등을 참고하세요.
에러 처리부분은 단순하게 했으니 세부적인 에러 처리하기 위해서는 수정이 필요할 것이다.
헤더파일
// FileVersion.h
#pragma once
#include <string>
#pragma comment (lib, "version.lib")
class CFileVersion{
private:
DWORD verMajor; DWORD verMinor; DWORD verBuild; DWORD verRevision;
std::string filePath;
protected:
std::string currentPath(void);
public:
CFileVersion(const std::string& path = "");
~CFileVersion(void);
BOOL update();
std::string getVersion(void);
DWORD getMajor(void) { return verMajor; }
DWORD getMinor(void) { return verMinor; }
DWORD getBuild(void) { return verBuild; }
DWORD getRevision(void) { return verRevision; }
};
소스파일
// FileVersion.cpp
#include "fileversion.h"
#include <sstream>
CFileVersion::CFileVersion(const std::string& path):
verMajor(0),
verMinor(0),
verBuild(0),
verRevision(0),
filePath(path){}
CFileVersion::~CFileVersion(void){}
std::string CFileVersion::getVersion(void){
std::string tmp;
std::ostringstream ostm;
ostm << verMajor << "." << verMinor << "." << verBuild << "." << verRevision;
return ostm.str();
}
BOOL CFileVersion::update(){
std::string path;
if(filePath.empty()) {
path = currentPath();
} else {
path = filePath;
}
DWORD sizeVer = GetFileVersionInfoSize(path.c_str(), NULL);
if(sizeVer < 0) {
return false;
}
char *pver = new char[sizeVer];
if (!GetFileVersionInfo(path.c_str(), NULL, sizeVer, pver)) {
return false;
}
VS_FIXEDFILEINFO *pfi;
UINT len;
if(!VerQueryValue(pver, _T("\\"), (LPVOID*)&pfi, &len)) {
delete[] pver;
return false;
}
verMajor = HIWORD(pfi->dwFileVersionMS);
verMinor = LOWORD(pfi->dwFileVersionMS);
verBuild = HIWORD(pfi->dwFileVersionLS);
verRevision = LOWORD(pfi->dwFileVersionLS);
delete[] pver;
return true;
}
std::string CFileVersion::currentPath(void){
TCHAR path[512];
DWORD n = GetModuleFileName(NULL, path, 512);
path[n] = TEXT('\0');
return path;
}
반응형
'2.분석 및 설계' 카테고리의 다른 글
함수 호출과정 분석 (0) | 2011.01.12 |
---|---|
코드 문서화 (0) | 2011.01.07 |
설치 패키지 작성시 고려사항 (0) | 2009.07.31 |
[Flash] Related of Flash Movie (0) | 2007.05.21 |
OOD(객체지향 개발)의 원칙 (0) | 2006.11.13 |