有没有api函数能知道文件的版本?

lingyunfeipu 2003-03-21 08:29:54
有没有api函数能知道文件的版本?
比如*.dwg 我要知道是R14还是R2000
有源代码吗?

...全文
30 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu_07 2003-07-11
  • 打赏
  • 举报
回复
AnsiString file = Application->ExeName; //exe文件名
unsigned int m_uiDataSize = GetFileVersionInfoSize(file.c_str(),NULL);
LPVOID m_lpBuffer = malloc(m_uiDataSize);
memset(m_lpBuffer,0,m_uiDataSize);
GetFileVersionInfo(file.c_str(),NULL,m_uiDataSize,m_lpBuffer);
LPVOID m_lpData=malloc(80);
memset(m_lpData,0,80);

AnsiString TempString = "";
union TTranslationTableEntry
{ //得到char_set,为了下一步查询
struct struct_Codes
{
WORD LanguageCode;
WORD CharsetCode;
} Codes;

DWORD RawData;
};

VerQueryValue(m_lpBuffer,
TEXT("\\VarFileInfo\\Translation"),
&m_lpData,
&m_uiDataSize);
TempString.printf("%.4X%.4X", (static_cast<TTranslationTableEntry*>(m_lpData))->Codes.LanguageCode,
(static_cast<TTranslationTableEntry*>(m_lpData))->Codes.CharsetCode);

TempString ="\\StringFileInfo\\"+TempString+"\\ProductVersion";
AnsiString ProductVersion;
VerQueryValue(m_lpBuffer,
TempString.c_str(),
&m_lpData,
&m_uiDataSize);
ProductVersion.sprintf("%s",m_lpData);
free(m_lpBuffer);
free(m_lpData);
「已注销」 2003-05-27
  • 打赏
  • 举报
回复
mark
书生 2003-03-21
  • 打赏
  • 举报
回复
学习。
jimzj 2003-03-21
  • 打赏
  • 举报
回复
同意楼上的
xuv2002 2003-03-21
  • 打赏
  • 举报
回复
代码我给你贴贴
AnsiString file = "d:\\winnt\\hh.exe";
unsigned int m_uiDataSize = GetFileVersionInfoSize(file.c_str(),NULL);
LPVOID m_lpBuffer = malloc(m_uiDataSize); memset(m_lpBuffer,0,m_uiDataSize);
GetFileVersionInfo(file.c_str(),NULL,m_uiDataSize,m_lpBuffer);
LPVOID m_lpData=malloc(80);memset(m_lpData,0,80);
AnsiString productname;
VerQueryValue(m_lpBuffer,
TEXT("\\StringFileInfo\\040904B0\\ProductName"), //产品名称
&m_lpData,
&m_uiDataSize);
productname.sprintf("%s",m_lpData);
AnsiString ProductVersion;
VerQueryValue(m_lpBuffer,
TEXT("\\StringFileInfo\\040904B0\\ProductVersion"),
&m_lpData,
&m_uiDataSize);
ProductVersion.sprintf("%s",m_lpData);
AnsiString Company;
VerQueryValue(m_lpBuffer,
TEXT("\\StringFileInfo\\040904B0\\CompanyName"),
&m_lpData,
&m_uiDataSize);
Company.sprintf("%s", m_lpData);
AnsiString CopyRight;
VerQueryValue(m_lpBuffer,
TEXT("\\StringFileInfo\\040904B0\\LegalCopyright"),
&m_lpData,
&m_uiDataSize);
CopyRight.sprintf("%s", m_lpData);
AnsiString Comments;
VerQueryValue(m_lpBuffer,
TEXT("\\StringFileInfo\\040904B0\\Comments"),
&m_lpData,
&m_uiDataSize);
Comments.sprintf("%s", m_lpData);
AnsiString FileVer;
VerQueryValue(m_lpBuffer,
TEXT("\\StringFileInfo\\040904B0\\FileVersion"),
&m_lpData,
&m_uiDataSize);
FileVer.sprintf("%s", m_lpData);
/*
其他的我就不写了,照着来就行了
TEXT("\\StringFileInfo\\040904B0\\InternalName"),
TEXT("\\StringFileInfo\\040904B0\\FileDescription"),
TEXT("\\StringFileInfo\\040904B0\\PrivateBuild"),
TEXT("\\StringFileInfo\\040904B0\\LegalTrademarks"),
TEXT("\\StringFileInfo\\040904B0\\SpecialBuild"),

*/
free(m_lpBuffer); m_lpBuffer = NULL;
free(m_lpData); m_lpData = NULL;
zahuifan 2003-03-21
  • 打赏
  • 举报
回复
同意 invalid(空心菜),自己弄才有乐趣。
xuv2002 2003-03-21
  • 打赏
  • 举报
回复
BOOL GetFileVersionInfo(

LPTSTR lptstrFilename, // pointer to filename string
DWORD dwHandle, // ignored
DWORD dwLen, // size of buffer
LPVOID lpData // pointer to buffer to receive file-version info.
);


The GetFileVersionInfo function returns version information about a specified file.
invalid 2003-03-21
  • 打赏
  • 举报
回复
用UltraEdit打开两个文件比较一下,应该在文件头部有版本号的。分析得到规律了自己用文件读写函数判断。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧