回 帖 发 新 帖 刷新版面

主题:怎样判断对象在使用

各位老师,我运行下列代码:
IF directory('d:\czmx')  &&如c:\你想测的文件夹存在
    DirName='d:\czmx'
    loFSO = CREATEOBJECT("Scripting.FileSystemObject")
    loFSO.DeleteFolder(dirName)
ENDIF
提示ole错误
加上代码clear all后提示"不能清除对象%,因为它正在使用,请问怎样判断什么对象在使用呢?

回复列表 (共6个回复)

沙发

[quote]请问怎样判断什么对象在使用呢?[/quote]


文件夹中有正在使用的文件或是其属性为只读!

板凳


IF directory('d:\czmx')  &&如c:\你想测的文件夹存在
    DirName='d:\czmx'
    loFSO = CREATEOBJECT("Scripting.FileSystemObject")
    LOCAL cerr
    ON ERROR cerr=.T.
    loFSO.DeleteFolder(dirName,.T.)
    ON ERROR
    IF cerr
        ?"文件夹有文件正在使用,不能删除!"
    ENDIF
ENDIF

3 楼

try
 loFSO.DeleteFolder(dirName)
catch
 messagebox("删除失败")
endtry

4 楼

请问moz老师,try
 loFSO.DeleteFolder(dirName)
catch
 messagebox("删除失败")
endtry中try 
        cath
        endtry
是什么意思?
祝各位老师中秋快乐!!!

5 楼

try     尝试
catch   抓住(错误)
endtry  结束尝试

6 楼

新学者慎用

try
endtry 结构化错误处理。


不能明确的移动程序运行到一个 CATCH 或 FINALLY 代码块儿中。

Visual FoxPro 确定变量的作用域是在一个过程中,而不是程序块儿。更确切的说,在 TRY 块儿中定义的变量,在同一个 TRY...CATCH...FINALLY 结构的  FINALLY 块儿中是可见的。但是,一个嵌套的结构中,在 TRY, CATCH, 或 FINALLY 块儿中定义的变量的作用域是局部的(local)。

不应该在 TRY 块儿中初始化变量或设置关键代码,因为不能保证代码会运行。如果一个错误出现在 TRY 块儿代码中的特定行,所有 TRY 块儿后面的代码不会运行。

任何出现在对象的 Error 过程中的错误,必须在对象中处理,并且它不会逐步上移到 ON ERROR 事务或 TRY...CATCH...FINALLY 处理程序。但是,可以在 Error 事件中使用 TRY...CATCH...FINALLY 结构来捕获 Error 事件中的错误。更多的信息,请参见 Error 事件。


在 CATCH 块儿中使用 COMRETURNERROR( ) 函数,将结束所有进一步的处理,并直接返回程序控制权到 Component Object Model (COM) 客户。因此,如果有一个 FINALLY 块儿,它将不会执行。更多的信息,请参见 COMRETURNERROR( ) 函数。


应避免在 TRY...CATCH...FINALLY 结构中使用 SET TEXTMERGE TO MEMVAR 命令,因为,如果结构中出现了错误,内存变量将丢失。

要检测一连串动作和错误处理程序,可以在 TRY...CATCH...FINALLY 代码中使用 SYS(2410) - 错误处理器 函数,比如,用一个 DO CASE 结构,依靠处理器类型来处理异常。更多的信息,请参见 SYS(2410) - 错误处理器。


如果结构封装适当,可以用 TRY...CATCH...FINALLY 和类似 ON KEY LABEL 的命令来处理菜单(menu)和计时器(timer)事件中的错误。下面的示例举例说明了 READ EVENTS 命令如何在 TRY...CATCH...FINALLY 结构中保持程序的控制权,从而捕获菜单事件。错误捕获是由 TRY...CATCH...FINALLY 在调用堆栈的位置约束的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册