Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Getting file attributes
Message
From
09/09/2006 19:08:42
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
To
09/09/2006 03:44:46
General information
Forum:
Visual FoxPro
Category:
Other
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Miscellaneous
Thread ID:
01152363
Message ID:
01152595
Views:
29
This message has been marked as a message which has helped to the initial question of the thread.
Table? Then maybe you're looking for lupdate().
Cetin

>thanks Cetin,
>It is what I was looking for , but I cannot get info by an open table...
>
>>>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
>>***************************************
>>* Declarations
>>***************************************
>>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
>>***************************************
>>* Declarations
>>***************************************
>>
>>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) && Create handle
>>If lnhandle > 0
>>	Store REPLICATE(CHR(0), 16) to lcCreateTime, lcLastAccessTime, lcModifiedTime
>>	lnresult = GetFileTime(lnhandle, @lcCreateTime, @lcLastAccessTime, @lcModifiedTime)
>>	=CloseHandle(lnhandle) && Close the handle
>>    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*.*") && multiple skeletons are possible, can search subdirs etc
>>
>>FUNCTION myFileInfo
>>LPARAMETERS tcFileName
>>Local oFiler, ix
>>oFiler = Createobject('filer.fileutil')
>>With oFiler
>>  .SearchPath = JUSTPATH(m.tcFileName)
>>  .FileExpression = JUSTFNAME(m.tcFileName) && Search for skeleton with wildcards
>>  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
Çetin Basöz

The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses

LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform