>how can I get informations about a file size and the date of creation ?
>I want to test if there were any changes in the file...
>thank you
>Alessio
Alessio,
Do you mean 'create/modified/accessed' dates seen in explorer when you right click on file? If so you can get that info either with winAPI or VFP's filer.dll.
1)WinAPI
lparameters tcFileName
DECLARE SHORT GetFileTime IN Win32API;
INTEGER hFile, STRING @lpftCreation,;
STRING @lpftLastAccess, STRING @lpftLastWrite
DECLARE SHORT FileTimeToSystemTime IN Win32API;
STRING @lpft, STRING @lpst
DECLARE SHORT FileTimeToLocalFileTime IN Win32API;
STRING @lpFileTime, STRING @lpLocalFileTime
Declare INTEGER CreateFile IN Win32API;
STRING @lpFileName, INTEGER dwDesiredAccess,;
INTEGER dwShareMode, STRING @lpSecurityAttributes,;
INTEGER dwCreationDistribution, INTEGER dwFlagsAndAttributes,;
INTEGER hTemplateFile
Declare SHORT CloseHandle IN Win32API;
INTEGER hObject
#define GENERIC_READ 0x80000000
#Define GENERIC_WRITE 0x40000000
#define FILE_SHARE_READ 0x00000001
#Define FILE_SHARE_WRITE 0x00000002
#Define OPEN_EXISTING 0x00000003
Local lcFileName, ltCreateTime, ltLastAccessTime, ltModifiedTime
Local lnCreateMillis, lnLastAccessMillis, lnModifiedMillis
_GetFileTime(tcFileName, ;
@ltCreateTime, @ltLastAccessTime, @ltModifiedTime, ;
@lnCreateMillis, @lnLastAccessMillis, @lnModifiedMillis)
? 'Created :', ltCreateTime, lnCreateMillis
? 'Last Access :', ltLastAccessTime, lnLastAccessMillis
? 'Modified :', ltModifiedTime, lnModifiedMillis
Function _GetFileTime
Lparameters tcFile, ttCreated, ttLastAccess, ttModified, ;
tnCreatedMillis, tnLastAccessMillis, tnModifiedMillis
Local lcCreateTime, lcLastAccessTime, lcModifiedTime, lnMillis
lnhandle = CreateFile(@tcFile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0)
If lnhandle > 0
Store REPLICATE(CHR(0), 16) to lcCreateTime, lcLastAccessTime, lcModifiedTime
lnresult = GetFileTime(lnhandle, @lcCreateTime, @lcLastAccessTime, @lcModifiedTime)
=CloseHandle(lnhandle)
if lnresult # 0
ttCreated = _DecodeFileTime(lcCreateTime,@tnCreatedMillis)
ttLastAccess = _DecodeFileTime(lcLastAccessTime,@tnLastAccessMillis)
ttModified = _DecodeFileTime(lcModifiedTime,@tnModifiedMillis)
endif
else
Messagebox("Cannot create handle to file!")
endif
function _DecodeFileTime
lparameters tcFileTime, tnMillis
local lcLocalTime, lcSysTime, lnResult, ltTime
ltTime = {/:}
Store REPLICATE(CHR(0), 16) to lcLocalTime, lcSysTime
if FileTimeToLocalFileTime(@tcfiletime, @lcLocalTime) # 0 and ;
FileTimeToSystemTime(@lcLocalTime, @lcSysTime) # 0
ltTime = Datetime(Str2Val(substr(lcSysTime,1,2)), ;
Str2Val(substr(lcSysTime, 3,2)),;
Str2Val(substr(lcSysTime, 7,2)),;
Str2Val(substr(lcSysTime, 9,2)),;
Str2Val(substr(lcSysTime,11,2)),;
Str2Val(substr(lcSysTime,13,2)) )
tnMillis = Str2Val(substr(lcSysTime,15,2))
endif
Return ltTime
Function Str2Val
Lparameters tcStr
Local lnVal
lnVal = 0
for ix=1 to len(tcStr)
lnVal = lnVal + asc(substr(tcStr,ix,1))*256^(ix-1)
endfor
return lnVal
2) Filer.dll
clear
myFileInfo("c:\my path\myFile*.*")
FUNCTION myFileInfo
LPARAMETERS tcFileName
Local oFiler, ix
oFiler = Createobject('filer.fileutil')
With oFiler
.SearchPath = JUSTPATH(m.tcFileName)
.FileExpression = JUSTFNAME(m.tcFileName)
For ix=1 To .Find(0)
With .Files(m.ix)
If !(Bittest(.Attr,4) And .Name = '.')
? .Path, .Name, .Size, Attr2Char(.Attr), ;
Num2Time(.Datetime), Num2Time(.LastAccessTime), Num2Time(.LastWriteTime)
Endif
Endwith
Endfor
Endwith
Function Num2Time
Lparameters tnFloat
Return Dtot({^1899/12/30}+Int(tnFloat))+86400*(tnFloat-Int(tnFloat))
Function Attr2Char
Lparameters tnAttr
Return ;
IIF(Bittest(tnAttr,0),'RO','RW')+;
IIF(Bittest(tnAttr,1),'H','_')+;
IIF(Bittest(tnAttr,2),'S','_')+;
IIF(Bittest(tnAttr,4),'D','_')+;
IIF(Bittest(tnAttr,5),'A','_')+;
IIF(Bittest(tnAttr,6),'E','_')+;
IIF(Bittest(tnAttr,7),'N','_')
Filer.dll is also used by:
do form home()+'tools\filer\filer'
Cetin