Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Directory creation date
Message
 
À
01/10/2013 21:39:30
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivie
Information générale
Forum:
Visual FoxPro
Catégorie:
Fonctions Windows API
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01584632
Message ID:
01584633
Vues:
61
This message has been marked as the solution to the initial question of the thread.
oFS=CREATEOBJECT('Scripting.FileSystemObject')
f1=GETDIR()
oF1= oFS.GetFolder(M.f1)
?oF1.DateCreated
?oF1.DateLastModified
?oF1.DateLastAccessed


>Hi, I have trouble getting the creation date for a directory. I copied some functions from a forum on the Web, and it works fine with a file, but not with a directory. It seems the relevant function can't get the file handle. Here is the code I used; I used fullpath("") to get the current directory, and also hardcoding the directory, which didn't work either.
>
>TIA,
>
>Hilmar.
>
>
>*********************************************************
>* Function getftime
>* Return the create date and time, last access date and time,
>* last write date and time from a passed filename.
>* 
>* Passed:
>* lcFileName (by value): fully-qualified filename
>* 
>* Returns:
>* Logical .t. if completed successfully, .f. if not.
>* 
>* Return variables:
>* ldCreateDate (date, by reference): Creation date
>* lcCreateTime (character, by reference): Creation time (HH:MM:SS.mm)
>* ldAccessDate (date, by reference): Last access date
>* lcAccessTime (character, by reference): Last access time (HH:MM:SS.mm)
>* lcLastWriteDate (date, by reference): Last write date
>* lcLastWriteTime (character, by reference): Last write time (HH:MM:SS.mm)
> 
>STORE {} TO m.createdate, m.accessdate, m.lastwritedate
>STORE "" TO m.createtime, m.accesstime, m.lastwritetime
>
>m.OK = getftime(FULLPATH(""), @m.createdate, @m.createtime, ;
>    @m.accessdate, @m.accesstime, @m.lastwritedate, @m.lastwritetime)
> 
>IF m.OK
>    ? "Create date:      ", m.createdate
>    ? "Create time:      ", m.createtime
>    ? "Last access date: ", m.accessdate
>    ? "Last access time: ", m.accesstime
>    ? "Last write date:  ", m.lastwritedate
>    ? "Last write time:  ", m.lastwritetime
>ELSE
>    ? "Error getting file times"
>ENDIF
>* End of usage example.
> 
>FUNCTION getftime
>PARAMETERS lcFileName, ldCreateDate, lcCreateTime, ldAccessDate,;
>    lcAccessTime, ldLastWriteDate, lcLastWriteTime
> 
>* DEFINEs for file share mode.
>#DEFINE FILE_SHARE_READ  1
>#DEFINE FILE_SHARE_WRITE 2
> 
>* DEFINEs for access right
> #DEFINE GENERIC_READ  hex2dec("80000000")
> #DEFINE GENERIC_WRITE hex2dec("40000000")
> 
>* DEFINES for Create Mode.
>#DEFINE CREATE_NEW  1
>#DEFINE CREATE_ALWAYS 2
>#DEFINE OPEN_EXISTING 3
>#DEFINE OPEN_ALWAYS 4
>#DEFINE TRUNCATE_EXISTING 5
> 
>* File flag.
>#DEFINE FILE_ATTRIBUTE_NORMAL hex2dec("80")
> 
>    * Blank filename or nonexistent file, no need to continue.
>    IF EMPTY(lcFileName) OR NOT FILE(lcFileName)
>        RETURN .F.
>    ENDIF
> 
>    DECLARE INTEGER CreateFile IN kernel32;
>        STRING lpFileName, INTEGER dwDesiredAccess,;
>        INTEGER dwShareMode, INTEGER lpSecurityAttributes,;
>        INTEGER dwCreationDisposition,;
>        INTEGER dwFlagsAndAttributes, INTEGER hTemplateFile
> 
>    DECLARE INTEGER GetFileTime IN kernel32;
>        INTEGER hFile, STRING @lpCreationTime,;
>        STRING @lpLastAccessTime, STRING @lpLastWriteTime
> 
>    DECLARE INTEGER FileTimeToLocalFileTime IN kernel32;
>        STRING @lpFileTime, STRING @lpLocalFileTime
> 
>    DECLARE INTEGER FileTimeToSystemTime IN kernel32;
>        STRING @lpFileTime, STRING @lpSystemTime
> 
>    DECLARE INTEGER GetLastError IN kernel32
>    DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject
> 
>    * 2 DWORDs * 4 bytes each = an 8-byte buffer.
>    STORE SPACE(8) TO CreationTime, LastAccessTime, lastwritetime
> 
>    * Same buffers for local time.
>    STORE SPACE(8) TO LocalCreationTime,;
>        LocalLastAccessTime, LocalLastWriteTime
> 
>    * 16-byte buffers for when we convert from the FILETIME
>    * structs to the more human-readable SYSTEMTIME structures.
>    STORE SPACE(16) TO ctSystemTime, laSystemTime, lwSystemTime
> 
>    * Open an existing file.
>    lhFileHandle = CreateFile(lcFileName, GENERIC_READ,;
>        FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
> 
>    IF lhFileHandle <= 0
>        =MESSAGEB ("Error in CreateFile - " + lcFileName + ": Error code - " + ;
>            LTRIM(STR(GetLastError())))
>        RETURN .F.
>    ENDIF
> 
>    * Make the GetFileTime call, to get Create, Access and Update times.
>    m.retval = GetFileTime (lhFileHandle,;
>        @CreationTime, @LastAccessTime, @lastwritetime)
> 
>    IF m.retval = 0
>    * 32 = Sharing violation
>    * 87 = Invalid parameter
>        =MESSAGEB("Error calling GetFileTime. Error code: " + ;
>            LTRIM(STR(GetLastError())))
>        RETURN .F.
>    ENDIF
> 
>* Successfully performed the GetFileTime call -
>* now convert each of the three times to local time.
>* If any of them fail, then exit.
>    IF     FileTimeToLocalFileTime (@CreationTime, @LocalCreationTime) = 0;
>        OR FileTimeToLocalFileTime (@LastAccessTime,@LocalLastAccessTime) = 0;
>        OR FileTimeToLocalFileTime (@lastwritetime, @LocalLastWriteTime) = 0 
> 
>        = MESSAGEB("FileTimeToLocalFileTime Failed. Error code: " + ;
>            LTRIM(STR(GetLastError())))
>        RETURN .F.
>    ENDIF
> 
>* Now you have a local filetime, convert each to a systemtime that
>* you can work with.
>* If any of the calls fail, then exit.
>    IF     FileTimeToSystemTime (@LocalCreationTime, @ctSystemTime) = 0;
>        OR FileTimeToSystemTime (@LocalLastAccessTime, @laSystemTime) = 0;
>        OR FileTimeToSystemTime (@LocalLastWriteTime, @lwSystemTime) = 0
> 
>        = MESSAGEB("FileTimeToSystemTime call failed. Error code: " ;
>            + LTRIM(STR(GetLastError())))
>        RETURN .F.
>    ENDIF
> 
>    ctstYear = Str2Word(LEFT(ctSystemTime, 2))
>    ctstMonth = Str2Word(SUBSTR(ctSystemTime, 3, 2))
>    ctstDayofWeek = Str2Word(SUBSTR(ctSystemTime, 5, 2))
>    ctstDay = Str2Word(SUBSTR(ctSystemTime, 7, 2))
>    ctstHour = Str2Word(SUBSTR(ctSystemTime, 9, 2))
>    ctstMinute = Str2Word(SUBSTR(ctSystemTime, 11, 2))
>    ctstSecond = Str2Word(SUBSTR(ctSystemTime, 13, 2))
>    ctstMilliSecond = Str2Word(SUBSTR(ctSystemTime, 15, 2))
> 
>* Unpack the integers in last access time SystemTime structure.
>    lastYear = Str2Word(LEFT(laSystemTime, 2))
>    lastMonth = Str2Word(SUBSTR(laSystemTime, 3, 2))
>    lastDayofWeek = Str2Word(SUBSTR(laSystemTime, 5, 2))
>    lastDay = Str2Word(SUBSTR(laSystemTime, 7, 2))
>    lastHour = Str2Word(SUBSTR(laSystemTime, 9, 2))
>    lastMinute = Str2Word(SUBSTR(laSystemTime, 11, 2))
>    lastSecond = Str2Word(SUBSTR(laSystemTime, 13, 2))
>    lastMilliSecond = Str2Word(SUBSTR(laSystemTime, 15, 2))
> 
>* Unpack the integers in last write time SystemTime structure.
>    lwstYear = Str2Word(LEFT(lwSystemTime, 2))
>    lwstMonth = Str2Word(SUBSTR(lwSystemTime, 3, 2))
>    lwstDayofWeek = Str2Word(SUBSTR(lwSystemTime, 5, 2))
>    lwstDay = Str2Word(SUBSTR(lwSystemTime, 7, 2))
>    lwstHour = Str2Word(SUBSTR(lwSystemTime, 9, 2))
>    lwstMinute = Str2Word(SUBSTR(lwSystemTime, 11, 2))
>    lwstSecond = Str2Word(SUBSTR(lwSystemTime, 13, 2))
>    lwstMilliSecond = Str2Word(SUBSTR(lwSystemTime, 15, 2))
> 
>* Close the file handle.
>    llRetCode = CloseHandle(lhFileHandle)
> 
>* Format the return variables.
>    ldCreateDate = CTOD(LTRIM(STR(ctstMonth)) + "/" + ;
>        LTRIM(STR(ctstDay)) + "/" + LTRIM(STR(ctstYear)))
> 
>    lcCreateTime = PADL(LTRIM(STR(ctstHour)), 2, "0") + ":" + ;
>        PADL(LTRIM(STR(ctstMinute)), 2, "0") + ":" + ;
>        PADL(LTRIM(STR(ctstSecond)), 2, "0") + "." + ;
>        PADL(LTRIM(STR(ctstMilliSecond)), 3, "0")
> 
>    ldAccessDate = CTOD(LTRIM(STR(lastMonth)) + "/" + ;
>        LTRIM(STR(lastDay)) + "/" + LTRIM(STR(lastYear)))
> 
>    lcAccessTime = PADL(LTRIM(STR(lastHour)), 2, "0") + ":" + ;
>        PADL(LTRIM(STR(lastMinute)), 2, "0") + ":" + ;
>        PADL(LTRIM(STR(lastSecond)), 2, "0") + "." + ;
>        PADL(LTRIM(STR(lastMilliSecond)), 3, "0")
> 
>    ldLastWriteDate = CTOD(LTRIM(STR(lwstMonth))+ ;
>        "/"+LTRIM(STR(lwstDay)) + "/" + LTRIM(STR(lwstYear)))
> 
>    lcLastWriteTime = PADL(LTRIM(STR(lwstHour)), 2, "0") + ":" + ;
>        PADL(LTRIM(STR(lwstMinute)), 2, "0") + ":" + ;
>        PADL(LTRIM(STR(lwstSecond)), 2, "0") + "." + ;
>        PADL(LTRIM(STR(lwstMilliSecond)), 3, "0")
> 
>* Function hex2dec - Convert a character hex value into decimal.
>* Handy for dealing with Hex declarations in API calls.
>* Passed: m.hex (character hex value)
>* Returns: Decimal value
>FUNCTION hex2dec
>PARAMETER m.hex
>    m.decimal = 0
>    FOR i = LEN(m.hex) TO 1 STEP -1
>        m.decimal = m.decimal + (AT(SUBSTR(m.hex, i, 1), ;
>            "0123456789ABCDEF") - 1) * 16 ^ (LEN(m.hex) - i)
>    NEXT
>RETURN m.decimal
> 
>* Function str2word - Converts low-high format string representation
>* to a 16-bit integer (word) value. Useful for unrolling structure
>* members containg WORD types.
>* 
>* Passed: Low-high string representation of 16-bit integer
>* Returns: numeric value
>FUNCTION Str2Word
>PARAMETERS m.wordstr
>    PRIVATE i, m.retval
> 
>    m.retval = 0
>    FOR i = 0 TO 8 STEP 8
>        m.retval = m.retval + (ASC(m.wordstr) * (2^i))
>        m.wordstr = RIGHT(m.wordstr, LEN(m.wordstr) - 1)
>    NEXT
>RETURN m.retval
>
ICQ 10556 (ya), 254117
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform