获取文件的信息

//文件的版本信息(大小和制造商)
struct FILEVERSION
{
 DWORD dwSize;//文件大小
 char szName[256];//文件的出品公司
};

 

/*--------------------------------------
函数描述:获取文件的大小和出品公司
输入参数:filepath 文件的路径
输出参数:pFileVersion 文件的版本结构信息(大小,出品公司)
返回值:  成功返回TRUE 否则返回FALSE;
--------------------------------------*/
BOOL GetFileCoName(char* filepath,FILEVERSION* pFileVersion)
{
 if (filepath == NULL)
 {
  return FALSE;
 }

 FILEVERSION fv;
 ZeroMemory(&fv,sizeof(FILEVERSION));

 DWORD dwTmp = 0;
 DWORD dwSize = GetFileVersionInfoSize(filepath, &dwTmp);
 if( dwSize == 0 )
  return FALSE;

 fv.dwSize = dwSize;

 BYTE* pData = new BYTE[dwSize];
//  BYTE* pData = NULL;
//  pData = (BYTE*)GlobalAlloc(GPTR,sizeof(BYTE));

 if( pData == NULL )
  return FALSE;

 ZeroMemory(pData, dwSize);

 if( !GetFileVersionInfo(filepath, 0, dwSize, pData) )
 {
  delete[] pData;
 // GlobalFree(pData);
  pData = NULL;
  return FALSE;
 }
 LANGANDCODEPAGE* ppBuf = NULL;

 DWORD cbSize = 0;

 if( !VerQueryValue(pData,"//VarFileInfo//Translation", (void**)&ppBuf, (PUINT)&cbSize) )
 {
  delete[] pData;
 // GlobalFree(pData);
  pData = NULL;
  return FALSE;
 }

 char* pszCoName = NULL;

 for(UINT i=0; i < (cbSize/sizeof(struct LANGANDCODEPAGE)); i++ )
 {
  char substr[128] = {0 };
  sprintf_s(substr, "//StringFileInfo//%04x%04x//CompanyName", ppBuf[i].wLanguage, ppBuf[i].wCodePage);

  DWORD len = 0;
  if( VerQueryValueA(pData, substr, (void**)&pszCoName, (PUINT)&len) )
  {
   strcpy(fv.szName,pszCoName);
  }
 }

 delete[] pData;
// GlobalFree(pData);
 pData = NULL;

 *pFileVersion =fv;

 return TRUE;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值