GETDIFF         Get specific changes within local PC file system

Top  Previous  Next

Syntax:

GETDIFF

[ dbfile ]

Arguments:

[ dbfile ]

Optional Variable or string specifying a snapshot database file. If omitted, the default value is “snapshot_local.sql”. When [ dbfile ] is specified without a full path the alternate default path is used.

Options:

/commitlast

Mark current difference "done" on the next call to GETDIFF.

 

/incldirs

Allows returning new or deleted directories.

 

 

The DIFF and GETDIFF commands work together to identify and process changes to local files.

 

The GETDIFF command sets the values of five internal variables with details describing a change to a single local file. These details are pulled from a snapshot database where they were inserted by a previous call to the DIFF command. Subsequent calls to GETDIFF fetch the details of subsequent changes from the database. The GETDIFF command is typically used in a loop so that each detected change is processed during one iteration of the loop. Depending on your needs, the processing may involve one or more of the internal variables set by this command. It is possible for GETDIFF to report file changes in alphabetical order rather than folder hierarchical order depending on how the records are stored in the snapshot database. This command returns $ERROR_READ_EOF when there are no more differences in the database. The DIFFREWIND command is available to reset the file pointer to the first change recorded in the database.

 

If the [ dbfile ] argument is omitted, the default file name “snapshot_local.sql” file is used. An error occurs if the snapshot database file does not exist.

 

The GETDIFF command sets the values of the following variables that you can use in your script logic:

 

%difffileid

Type of change detected

%difffiletext

Text description of type of change detected

%difffilename

Name of changed file

%difffilepath

Full path of changed file

%diffnum

Sequential change number

 

The possible values of %difffileid and %difffiletext are:

 

$DIFF_FILE_NOT_FOUND

5001

** File not found

$DIFF_FILE_IS_NEW

5002

** File is new

$DIFF_FILE_SIZE

5003

** File size changed

$DIFF_FILE_DATETTIME

5004

** File date/time stamp changed

With /incldirs:

 

 

$DIFF_DIRECTORY_NOT_FOUND

5005

** File not found

$DIFF_DIRECTORY_IS_NEW

5006

** File is new

 

Here is a simple example that shows how GETDIFF might be used inside a loop to write a text file that lists all the changes found by DIFF:

 

DIFF "*"

:loop

GETDIFF

IFERROR= $ERROR_READ_EOF GOTO done

SET change = "File: " + %difffilepath + " " + %difffiletext

WRITEFILE "differences.txt" change /append

GOTO loop

:done

 

The following example loops through all changes and uploads only the new files to a remote site:

 

DIFF "*"

:loop

GETDIFF

IFERROR= $ERROR_READ_EOF GOTO done

IFNUM!= %difffileid $DIFF_FILE_IS_NEW GOTO loop

SENDFILE %difffilepath

GOTO loop

:done

 

If you need to restart the loop, use the DIFFREWIND command to reset the file pointer to the first difference recorded in the snapshot database.

 

Normally, all current differences are marked "done" when DIFF is called again. The /commitlast option increases fault tolerance by causing GETDIFF to mark the previously retrieved difference done. This way, a difference should not be processed twice if loop processing is interrupted after GETDIFF is called but before the full loop iteration is complete.

 

Note: Snapshot database files are small SQLite database files created by Robo-FTP to support the DIFF and FTPDIFF family of script commands.

 

Related command(s): DIFF, DIFFREWIND, FTPGETDIFF

See also: Processing Dynamic Folders, Using the built-in database engine, Alternate Default Path