Filinfo

filinfo returns the properties of a file located on a file system that is accessible by the X3 engine. The file path is given as argument, and a second numeric argument defines the returned properties.

On UNIX, the filinfo performs a stat function on the file.

Syntax

   filinfo(FILE_PATH,INTEGER_EXPR)
  • FILE_PATH is a string expression that returns the file path. It can be prefixed by a server name with the syntax server@path, if the server has an adxd service running.

Examples

### Example 1: Check the size (in bytes) of a file
#### If the result is negative, the file doesn't exist or is not accessible
  FILE_SIZE = filinfo(FILE_PATH, 7)
### Example 2: What is the type of the UNIX MYFILE file ?
#### The P1, P2, PDIR, PCAR, PBLO, PFI1, PFI2, PFIF value might depend on the version of UNIX
#### check in mknod (2) documentation
  P1 = 2 ^ 12 : P2 = 16
  PFIF = 1 : PCAR = 2 : PDIR = 4 : PBLO = 6 : PFI1 = 0 : PFI2 = 8
  FILE_MODE = filinfo(FICHIER, 0)
  If FILE_MODE > 0
    Case int(mod(FILE_MODE/P1, P2))
      When PFIF : FILE_TYPE="fifo"
      When PCAR : FILE_TYPE="character device"
      When PDIR : FILE_TYPE="directory"
      When PBLO : FILE_TYPE="block device"
      When PFI1, PFI2 : FILE_TYPE="normal file"
      When default :FILE_TYPE="unknown"
    Endcase
  Else
    FILE_TYPE="(cannot be read)"
  Endif
### Example 3: two files xx.c and xx.o are present in the current directory
#### If the xx.c file is most recent than xx.o, let's recompile it
  Local Char TRACE_ERR(80)(1..24)
## Check the dates
  If filinfo("xx.c", 9) > filinfo("xx.o", 9)
    System "cc -c xx.c -o xx.o 2>trace.com"
    # Is the logfile empty?
    If filinfo("trace.com", 7)
      ERROR_FOUND=1
    Else
      ERROR_FOUND=0
    Endif
  Endif
## A file will be modified only if the number of links is 1
    NB_LINKS = filinfo(DIRECTORY+"/"+FILE_NAME,4)
    If NB_LINKS<0    : ERROR_MSG="File does not exist"
    Elsif NB_LIENS >1: ERROR_MSG="File with several links"
    Else
       Openio DIRECTORY+"/"+FILE_NAME
       ...
    Endif

Description

filinforeturns the properties of a file in a file system as the unix function stat (2) does. Depending on the second argument given, a different property is returned, according to the following table:

Second argument Property Available on UNIX Available on Windows
0 File mode (type, permissions) yes yes
1 Inode number yes no
2 Id of the device on which the file is located yes no
3 Id of the device if the file is a device yes no
4 Number of links yes 1 is returned
5 User ID of the owner of the file yes yes
6 Group ID of the owner of the file yes yes
7 File size in bytes yes yes
8 Last access time in millisecond since 1970,1,1 yes yes
9 Last modification time in millisecond since 1970,1,1 yes *
10 Last status change time in millisecond since 1970,1,1 yes *

(*) On Windows, the value returned for second arguments 9 and 10 (above) is the last access time.

Comments

filinfo returns an Integer.

If the file does not exist or cannot be accessed, a negative value that corresponds to the error status returned by the operating system is rendered. The usual values are the following:

Error value Description
-20 File does not exist.
-27 Access to the directory is denied.

Associated errors

Error code Description
10 Incorrect argument type.
50 The second argument is not in the [0,10] range.

See also

filpath, Openi, Openo, Openio