if we can't get the file version, get the size and date
This commit is contained in:
@@ -9,37 +9,54 @@
|
|||||||
|
|
||||||
bool GetFileVersion( CString fn, CString &out )
|
bool GetFileVersion( CString fn, CString &out )
|
||||||
{
|
{
|
||||||
DWORD ignore;
|
do {
|
||||||
DWORD iSize = GetFileVersionInfoSize( (char *) fn.c_str(), &ignore );
|
DWORD ignore;
|
||||||
if( !iSize )
|
DWORD iSize = GetFileVersionInfoSize( (char *) fn.c_str(), &ignore );
|
||||||
return false;
|
if( !iSize )
|
||||||
|
break;
|
||||||
|
|
||||||
CString VersionBuffer( iSize, ' ' );
|
CString VersionBuffer( iSize, ' ' );
|
||||||
if( !GetFileVersionInfo( (char *) fn.c_str(), NULL, iSize, (char *) VersionBuffer.c_str() ) )
|
if( !GetFileVersionInfo( (char *) fn.c_str(), NULL, iSize, (char *) VersionBuffer.c_str() ) )
|
||||||
return false;
|
break;
|
||||||
|
|
||||||
WORD *iTrans;
|
WORD *iTrans;
|
||||||
UINT iTransCnt;
|
UINT iTransCnt;
|
||||||
|
|
||||||
if( !VerQueryValue( (void *) VersionBuffer.c_str() , "\\VarFileInfo\\Translation",
|
if( !VerQueryValue( (void *) VersionBuffer.c_str() , "\\VarFileInfo\\Translation",
|
||||||
(void **) &iTrans, &iTransCnt ) )
|
(void **) &iTrans, &iTransCnt ) )
|
||||||
return false;
|
break;
|
||||||
|
|
||||||
if( iTransCnt == 0 )
|
if( iTransCnt == 0 )
|
||||||
return false;
|
break;
|
||||||
|
|
||||||
char *str;
|
char *str;
|
||||||
UINT len;
|
UINT len;
|
||||||
|
|
||||||
CString sRes = ssprintf( "\\StringFileInfo\\%04x%04x\\FileVersion",
|
CString sRes = ssprintf( "\\StringFileInfo\\%04x%04x\\FileVersion",
|
||||||
iTrans[0], iTrans[1] );
|
iTrans[0], iTrans[1] );
|
||||||
if( !VerQueryValue( (void *) VersionBuffer.c_str(), (char *) sRes.c_str(),
|
if( !VerQueryValue( (void *) VersionBuffer.c_str(), (char *) sRes.c_str(),
|
||||||
(void **) &str, &len ) )
|
(void **) &str, &len ) )
|
||||||
return false;
|
break;
|
||||||
|
|
||||||
out = CString( str, len );
|
out = CString( str, len );
|
||||||
|
return true;
|
||||||
|
} while(0);
|
||||||
|
|
||||||
return true;
|
/* If we can't get the file version, let's at least try to get the
|
||||||
|
* size and date. */
|
||||||
|
do {
|
||||||
|
struct stat st;
|
||||||
|
if( stat( fn, &st ) == -1 )
|
||||||
|
break;
|
||||||
|
|
||||||
|
struct tm t;
|
||||||
|
gmtime_r( &st.st_mtime, &t );
|
||||||
|
out = ssprintf( "%ib, %02i-%02i-%04i", st.st_size, t.tm_mon, t.tm_mday, t.tm_year+1900 );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} while(0);
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CString FindSystemFile( CString fn )
|
CString FindSystemFile( CString fn )
|
||||||
|
|||||||
Reference in New Issue
Block a user