FOLDERWATCH
The IDL folder watching system monitors folders for changes and invokes a user-defined callback whenever a change occurs. This enables IDL programmers to create a "batch" client that watches a specified "hot folder" and subsequently performs processing when specific conditions have been met (i.e., a file has been added to, modified, or deleted from the folder).
- If a file is added and removed between FolderWatch checks of a directory, IDL will not notice an "event" and will not report a change to the contents.
- Very large directories may take several seconds to check. Execution of IDL will be suspended during the check.
- Folder watching interrupts PRO code execution.
- When watching a directory, FOLDERWATCH will only issue "add" or "remove" notifications. A folder will never be reported as being modified.
Methods and Additional Information
- FolderWatch::Init (Initialize a watch folder)
- FolderWatch::Check (Forces a check on a folder)
- FolderWatch::Start (Start watching a folder)
- FolderWatch::Stop (Stop watching a folder)
Example
This example monitors the files in the current working directory, and its subdirectories, and prints out which file has changed and how.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Callback
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
pro MyCallback, obj, data
COMPILE_OPT IDL2
ret = "The file "
ret += data.file
ret += " has been "
if data.added then ret += "added to"
if data.modified then ret += "modified in"
if data.removed then ret += "removed from"
ret += " the working directory. "
ret += strtrim(obj.user_data,2)
PRINT, ret
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; MAIN
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COMPILE_OPT IDL2
; Get working directory
CD, current=c
f = FOLDERWATCH( c, 'MyCallback', user_data="HURRAY!", /RECURSIVE )
end
The example monitors the current working directory (and subdirectories) for all files and prints out what file has changed and how.
FolderWatch::Init
The FolderWatch::Init method initializes a FolderWatch object.
Note: Creation of a FolderWatch object automatically starts it.
Syntax
Obj = FolderWatch.Init( Folder, Callback [, /ADDED] [, /MODIFIED] [, /REMOVED] [, FREQUENCY=value] [/RECURSIVE] [, USER_DATA=variable] )
Return Value
Returns an object of type FolderWatch.
Arguments
Folder
A required string indicating the path of the folder to monitor.
Callback
A required string value specifying the name of the procedure that IDL should invoke when the specified event happens. The Callback is invoked each time a file changes (i.e., there is not just one Callback per time interval that contains an array of all of the changes that occurred, but instead, one per file change).
The callback must have the following signature:
PRO Name , Obj [, data]
Value |
Type |
Description |
---|---|---|
Name |
|
Name of the routine. |
Obj |
|
A reference to the FolderWatch object. |
data |
Structure |
A required IDLFolderWatchInfo structure containing the following fields:
Use to determine which file changed, and how. |
|
|
|
Keywords
ADDED
Set this optional keyword in order to fire a Callback when a file has been added to the watch folder. If you do not specify ADDED, MODIFIED, or REMOVED, then all are set.
Note: If ADDED is specified, then MODIFIED and REMOVED are unset.
MODIFIED
Set this optional keyword in order to fire a Callback when a file has been modified in the watch folder. If you do not specify ADDED, MODIFIED, or REMOVED, then all are set.
Note: If MODIFIED is specified, then ADDED and REMOVED are unset.
REMOVED
Set this optional keyword in order to fire a Callback when a file has been removed from the watch folder. If you do not specify ADDED, MODIFIED, or REMOVED, then all are set.
Note: If REMOVED is specified, then ADDED and MODIFIED are unset.
FREQUENCY
Set this optional keyword to equal the number of seconds to wait before checking the folder for further changes in the files. Defaults to 1 and is a double-precision number.
RECURSIVE
Set this optional keyword to monitor all files in a directory and subdirectories. Defaults to no recursion.
USER_DATA
Optional data to be delivered to the Callback function. The delivered data will be a copy of the original. If USER_DATA is not supplied then the callback receives !NULL
. USER_DATA can be any valid IDL value. Examples of valid IDL values include: a constant, variable, expression, an array, etc.
FolderWatch::Check
Use this method to force IDL to check the specified directory for changes.
Note: This does not start or stop a watch process on a folder.
Syntax
Obj.Check
Return Value
None.
Arguments
None.
Keywords
None.
FolderWatch::Start
Use this method to begin watching a folder.
Note: Creation of a FolderWatch object automatically starts it.
Syntax
Obj.Start
Return Value
None.
Arguments
None.
Keywords
None.
FolderWatch::Stop
Use this method to stop watching a specified folder.
Syntax
Obj.Stop
Return Value
None.
Arguments
None.
Keywords
None.
Version History
8.4 |
Introduced |