i have found this CODE, but don´t find the Thread again
- Code: Select all Expand view
********************************************************************************
FUNCTION FileDetails( cFilePath, cExeName )
********************************************************************************
// Return 2d array with file details of cFilePath or empty array if failed.
// If cFilePath is NIL tries to locate it in windows and program files folders
// using FindPath( cExeName (if passed) )
// cFilepath is the name of file with full path (e.g. 'C:\folder\xxx.exe')
// Win only! since it uses "Shell.Application" service
LOCAL aHeaders := { }
LOCAL aValues := { }
LOCAL aDetails := { }
LOCAL oShell, oFolder, oItem, oInfo
LOCAL i
hb_Default( @cFilePath, "" )
hb_Default( @cExeName, "" )
// cExeName := SubStr( cFilePath, RAt( "\", cFilePath ) + 1 )
cExeName := hb_FNameNameExt( cFilePath )
IF Empty( cFilePath )
RETURN { }
ENDIF
cFilePath := Left( cFilePath, RAt( "\", cFilePath ) - 1 )
oShell := win_oleCreateObject( "Shell.Application" )
oFolder := oShell:Namespace( cFilePath )
// Store property names into aHeaders
FOR i := 0 TO 288
oInfo := oFolder:GetDetailsOf( oFolder:ITEMS, i )
IF ! Empty( oInfo )
AAdd( aHeaders, oInfo )
ENDIF
NEXT
// get the file object
oItem := oFolder:ParseName( cExeName )
// MsgDebug( oItem, cExeName, cFilePath )
// Store property values in aValues
FOR i := 0 TO Len( aHeaders )
oInfo := oFolder:GetDetailsOf( oItem, i )
AAdd( aValues, oInfo )
NEXT
// Create aDetails 2-d array with property-value pairs
FOR i := 1 TO Len( aValues )
IF ! Empty( aValues[ i ] )
AAdd( aDetails, { aHeaders[ i ], aValues[ i ] } )
ENDIF
NEXT
RETURN aDetails
********************************************************************************
FUNCTION FileProperties( cFilePath, cExeName )
********************************************************************************
// Return 2d array with file properties of cFilePath or empty array if failed.
// If cFilePath is NIL tries to locate it in windows and program files folders
// using FindPath( cExeName (if passed) )
// cFilepath is the name of file with full path (e.g. 'C:\folder\xxx.exe')
LOCAL oLocator, oCon, oFile, oItem, oSecurity
LOCAL nPos, cAccess, nSize, cSize
LOCAL hAccess := { 2032127 => "Full Control" , ;
1179785 => "Read" , ;
1180063 => "Read, Write" , ;
1179817 => "Read and Execute" , ;
1245631 => "Read and Execute, Modify, Write", ;
1180095 => "Read and Execute, Write" , ;
268435456 => "Full Control (Sub Only)" , ;
-1610612736 => "Read and Execute Extended" }
LOCAL aProperties := { }
hb_Default( @cFilePath, "" )
hb_Default( @cExeName, "" )
IF Empty( cFilePath ) .OR. Left( cFilePath, 1 ) == "<"
// IF cExeName == 'System Idle Process' .OR. Empty( cFilePath := FindPath( cExeName ) )
RETURN { }
// ENDIF
ENDIF
oLocator := win_oleCreateObject( "WbemScripting.SWbemLocator" )
IF oLocator == NIL
MsgStop( "Error: create WMI object. [" + win_oleErrorText() + "]" )
RETURN { }
ENDIF
oCon := oLocator:ConnectServer( ".", "root\cimv2" )
oSecurity := oCon:Security_
oSecurity:ImpersonationLevel := 4
cFilePath := StrTran( cFilePath, "\", "\\" )
oFile := oCon:ExecQuery( "Select * from CIM_Datafile Where name = '" + cFilePath + "'" )
FOR EACH oItem IN oFile
IF HB_ISNIL( oItem )
LOOP
ENDIF
IF ( ! HB_ISNIL( oItem:AccessMask ) ) .AND. ( ( nPos := hb_HPos( hAccess, oItem:AccessMask ) ) > 0 )
cAccess := hb_HValueAt( hAccess, nPos )
ELSE
cAccess := "N/A"
ENDIF
nSize := Val( oItem:FileSize )
IF .T.
cSize := SHORTFILESIZE( nSize )
ELSEIF nSize > 999999999
cSize := Trans( nSize / 1024, "@E 999,999,999" ) + " Kb"
ELSE
cSize := Trans( nSize, "@E 999,999,999" ) + " bytes"
ENDIF
cSize += ( " (" + LTrim(Trans( nSize, "@E 999,999,999,999" )) + " bytes)" )
aProperties := { ;
{ "File name : ", oItem:NAME }, ;
{ "Name : ", oItem:FileName } , ; // { "8.3 file name : ", oItem:EightDotThreeFileName } , ;
{ "Extension : ", oItem:Extension } , ;
{ "File size : ", AllTrim( cSize ) /*Trans( Val(oItem:FileSize)/1024, "@E 999,999,999" ) + " Kb"*/ }, ;
{ "Creation date : ", WMI_DateTime2Str( oItem:CreationDate ) } , ;
{ "Last modified : ", WMI_DateTime2Str( oItem:LastModified ) } , ;
{ "Last accessed : ", WMI_DateTime2Str( oItem:LastAccessed ) } , ;
{ "File type : ", oItem:FileType }, ;
{ "Archive : ", Iif( oItem:Archive, "TRUE", "FALSE" ) } , ;
{ "Compressed : ", Iif( oItem:Compressed , "TRUE", "FALSE" ) } , ;
{ "Compres. method : ", oItem:CompressionMethod } , ;
{ "Readable : ", Iif( oItem:Readable, "TRUE", "FALSE" ) } , ;
{ "Writeable : ", Iif( oItem:Writeable, "TRUE", "FALSE" ) } , ;
{ "Encrypted : ", Iif( oItem:Encrypted, "TRUE", "FALSE" ) } , ;
{ "Encrypt. method : ", oItem:EncryptionMethod } , ;
{ "Hidden : ", Iif( oItem:Hidden, "TRUE", "FALSE" ) } , ;
{ "System : ", Iif( oItem:System, "TRUE", "FALSE" ) } , ;
{ "Path : ", oItem:Path } , ;
{ "File system name: ", oItem:FSName } , ;
{ "Access Rights : ", cAccess } , ;
{ "Version : ", oItem:Version } , ;
{ "Manufacturer : ", oItem:Manufacturer } ;
}
/*
{ "Computer system name ", oItem:CSName } , ;
{ "Drive ", oItem:Drive } , ;
{ "File size " , Trans( Val(oItem:FileSize)/1024, "@E 999,999,999" ) + " Kb" },;
*/
NEXT
RETURN aProperties
i have a Question about 2 missing Function
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Error: Unresolved external '_HB_FUN_SHORTFILESIZE' referenced from C:\FWH\0\PROPERTY\FILEINFOFUNCS.OBJ
Error: Unresolved external '_HB_FUN_WMI_DATETIME2STR' referenced from C:\FWH\0\PROPERTY\FILEINFOFUNCS.OBJ
Error: Unable to perform link
* Linking errors *
Who know this Thread or those missing Functions