MIAMEX 131: Get file stats

Reviewed June 2020

xcall MIAMEX, MX_FILESTATS, loc'rem, path, bytes {, mtime, ctime, mode, ver, hash, owner, group}

MX_FILESTATS returns stats for the specified path, either on the local system or the remote PC via ATE.

See the TAB(-10,x) Function Listing for an equivalent Print Tab command (AG_FILESTATS).

Parameters

loc'rem  (String, 1)  [in]

"L" for local system, "R" for remote PC, "C" for client/cache. See Comments, below, for more info on "C."

path  (String)  [in]

specifies a native path or AMOS-style filespec. If native, may include embedded environment variables using the %env% syntax. Note that if loc'rem is "R," and AMOS specification in path will be interpreted relative to the INI file used by ATE on the PC.

bytes  (signed Num)  [out]

returns the size of the file. If path is not found bytes will be set to -1. -2 indicates that you are attempting to use a remote PATH when you do not have ATE support.

mtime, ctime  (F or B,4)  [out]

return the last modification time (mtime) or creation time (ctime), in seconds since "the epoch" (Midnight Jan 1, 1970). Note that "time" includes date, in this context. This format is very convenient for comparing file times, but be forewarned that comparing file times on different machines (e.g. to decide if a file transfer/update is needed) requires that you synchronize the clocks on the machines in question! If you want to display the file times in a more human-friendly format, use MX_FTFORMAT. See fndatetime.bsi in SOSLIB:[907,10] for some useful and related date/time functions.

mode  (F or B,2+)  [out]

returns the mode bits indicating the type and other attributes of the file. The most interesting bits are:

Symbol

Value

Meaning

FSTS_PRVPX

&h0001

execute privilege (other)

FSTS_PRVPW

&h0002

write privilege (other)

FSTS_PRVPR

&h0004

read privilege (other)

FSTS_PRVGX

&h0008

execute (group)

FSTS_PRVGW

&h0010

write (group)

FSTS_PRVGR

&h0020

read (group)

FSTS_PRVOX

&h0040

execute (owner)

FSTS_PRVOW

&h0080

write (owner)

FSTS_PRVOR

&h0100

read (owner)

FSTS_SSWT

&h0200

save swapped text after use (sticky)

FSTS_SGID

&h0400

set group id on execution

FSTS_SUID

&h0800

set user id on execution

FSTS_PIPE

&h1000

pipe

FSTS_SPC

&h2000

chr/special

FSTS_DIR

&h4000

directory

FSTS_NORM

&h8000

regular file

Definition file: ashell.def

Hex-Decimal Values

 

ver  (String)  [out]

returns the file version information (for RUN, LIT and SBX files only), in the format "a.b.c{.d{.e})" where a=vmajor, b=vminor, c=vsub, d=vedit, e=vpatch. Note that because this format may not be convenient for easily comparing two versions to see which is later, optionally you can retrieve the string in the format "aaaaa.bbbbb.ccccc.ddddd.eeeee" by passing a string mapped as 30 bytes for the ver parameter.

Files that do not have versions will return empty version strings (rather than either of the formats described above).

The function does not support retrieving version strings from EXE and DLL files.

hash  (String, 15+)  [out]

returns the file hash code in the format ###-###-###-###

owner, group  [out]

may be returned as either integers or strings. If passed as B,4 variables, the numeric value (uid and gid) will be returned. Otherwise, the string names will be returned. Note that their owner and group info applies only to UNIX versions of A-Shell, but may be supported under some Windows versions in the future.

 

Comments

When MX_FILESTATS is used to query the status of a file on the PC (via ATE), if the filespec is a UNC spec (i.e. starts with "\\"), then the timeout wait is extended from 5 to 15 seconds. This eliminates most problems with ATE timing out before Windows times out, if the UNC spec is not available. The shorter timeout wait was leading to ATE becoming unsynchronized with the server, which in some cases was leading to application confusion.

The loc'rem parameter value "C", for client/cache, checks for the file on the local client computer, including looking in the cache and other default local directories. In the case of ATE, this is similar to the "R" (remote) option except that if the file is not found in the specified directory, a search will be made of the other directories that ATE normally checks when trying to open files at the behest of the server (%ATECACHE%, %ATEPERMCACHE%, %miame%\icon, and possibly others). In the case of local A-Shell/Windows, this is like the "L" (local) option, except that it also checks the above-mentioned directories. (The cache directory environment variables will typically not be defined for A-Shell/Windows, and thus will be ignored, but the %miame%\icons subdirectory and perhaps others may still be valid and searched.) See Get File Stats if you want to retrieve the actual filespec of the found file.

See Also

•   MX_HASHFILE

History

2011 June, A-Shell 5.1.1222:  Add new loc'rem parameter value "C", for client/cache.

2010 May, A-Shell 5.1.1182:  Add new parameters owner and group.

2009 February, A-Shell 5.1.1139:  Modify routine to retrieve version and hash along with other file info.