Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Getting file attributes
Message
From
08/09/2006 13:05:55
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
To
08/09/2006 12:19:35
General information
Forum:
Visual FoxPro
Category:
Other
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Miscellaneous
Thread ID:
01152363
Message ID:
01152393
Views:
24
This message has been marked as a message which has helped to the initial question of the thread.
>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