文件监视器

文件监视器用于监控指定目录下的文件,当创建、修改或删除文件时,会触发事件,通过设置对应的事件代码,可以间接和第三方的程序实现及时的数据交流。

在管理项目功能区,单击下面的按钮,可以设置文件监视器的属性和代码:

FileWatcher表示文件监视器,其属性有:

示例

With FileWatcher
    .
Path = "c:\Data"
    .
Filter = "Sale.mdb"
    .
Delay = 1000
   
.Enabled = True

End With

执行上面的代码后,将开始监控文件“c:\data\Sale.mdb”。
其实一般是通过菜单来设置FileWatcher的,很少需要利用代码来设置。

FileWatcher有三个事件:

e参数属性:

Name:     触发事件的文件名,不含路径。
FullPath:触发事件的文件名,含路径。

示例一

假如订单表是外部表,来自文件c:\data\Sale.mdb,我们可以监控此文件,一旦此文件发生变动,就重新加载订单表数据。
首先我们要监控此文件,在AfterOpenProject事件中设置代码:

With FileWatcher
    .
Path = "c:\Data"
    .
Filter = "Sale.mdb"
    .
Delay = 1000
   
.Enabled = True

End With

然后将FileChanged事件代码设置为:

DataTables("表A").Load()

看上去很简单,不过还有一个毛病,就是自己保存数据后,也会触发FileChanged,导致重新加载数据。为避免这种情况,我们可以自己做一个保存按钮:

FileWatcher.Enabled = False
DataTables
.Save()
FileWatcher.Enabled =
True

上面的代码在保存前停用文件监视器,保存结束后,重新开启文件监视器。

示例二

利用文件监视器,还可以和第三方软件协同工作。
例如有个人事管理系统,希望第三方的拍照软件给员工拍照,希望拍好的照片以员工的工号作为文件名,并自动存入员工表的照片列。
假定拍照软件存放照片的目录是"c:\photo",我们首先要监控此目录,在AfterOpenProject事件设置代码:

With FileWatcher
    .
Path = "c:\Photo"
    .
Delay = 1000
   
.Enabled = True

End With

然后将FileCreated事件代码设置为:

Dim r As Row = Tables("员工").Current
r("照片") = r("工号") & ".jpg"
FileSys.CopyFile(e.FullPath, ProjectPath & "Attachments\" & r("照片"),True)

这里假定照片是jpg格式。

最后在菜单或者窗口中加一个按钮,用于启动第三方拍照软件:

Dim Proc As New Process
Proc.File = "拍照程序的路径和名称"
Proc.Start()
Proc.
WaitForExit() '等带拍照程序退出。


本页地址:http://www.foxtable.com/webhelp/topics/1963.htm