回 帖 发 新 帖 刷新版面

主题:-- 有时删除一个文件,会出现存取错误,如何避免? ---

原因是因为这个文件正被某个程序读取,如何可以判断目标文件可以被删除?从而避免错误出现

回复列表 (共17个回复)

沙发

有时不得以我就用下面的方法解决.
ON ERROR AA=1 &&错误陷阱
DELE FILE 文件名.扩展名
ON ERROR 

板凳

用以下方法判断文件是否在使用最好:(这次cbl518老师的方法)
cFname="d:\teat.dbf"&&一个你要删除的文件
AA=0
ON ERROR AA=1 &&错误陷阱
RENAME (cFname) TO (cFname)
ON ERROR 
if AA=1
    ?"文件正被其它程序使用!"
    return 
endif

3 楼

RENAME (cFname) TO (cFname)???

什么意思?

我也是这么想,我以为有一些什么更直接的方法呢

4 楼

用fopen函数

文件名='abc.txt'
 x=fopen(文件名,12)
 =fclose(x)
 if x=-1
  =messagebox( '该文档已经被其它事务打开',22,"")
  return
 endi

* 删除文件
。。。。。。。

5 楼

做了一个比较有趣的实验,表单有一个按键按键代码:
dele file abc.doc
on error retry

实验一:
1、运行表单
2、用word打开abc.doc
3、点击按键

结果:表单一直尝试删除文件,直到我关闭word,才成功删除,消停

实验二:
1、用word打开abc.doc
2、运行表单
3、点击按键

结果:提示错误,不能存取


想不通?

6 楼

还是用乌鸦兄的方法吧:

x=-1
Do While x=-1 AND FILE('abc.doc')  && 删不了就不活了
   x=Fopen('abc.doc',12)
   =FCLOSE(x)
Enddo
if x!=-1
   dele file abc.doc
   on error retry                  && 很多余啊,呵呵
endi

7 楼

下面是本人程序中用来判断一个文件是否正被使用的自定义函数
其中 RENAME (cPrFileName) TO (cPrFileName) 语句是通过cbl518老师指点的方法
以前我也是用的FOPEN()函数,后来发现有问题,好像是在判断一个TXT文件是否在使用时不能判断,我是把TXT文件用记事本打开的,再用FOPEN()函数,函数成功打开了TXT文件,所以没法达到目的。但改为RENAME则可以。
FUNCTION FileUsed&&判断文件是否在使用,并返回逻辑型数据 
PARAMETERS cPrFileName&&必须是绝对路径
LOCAL nUseOpenError,cNowOnError
nUseOpenError=1
IF TYPE("cPrFileName")#"C"
    MESSAGEBOX("参数类型不符!",64,PROGRAM()+"函数提示")   
    RETURN .F.
ENDIF
cPrFileName=FULLPATH(ALLTRIM(cPrFileName))
IF !FILE(cPrFileName,1)
    RETURN .F.
ENDIF
cNowOnError=ON("ERROR")
ON ERROR nUseOpenError=0
RENAME (cPrFileName) TO (cPrFileName)
ON ERROR &cNowOnError.
RETURN IIF(nUseOpenError=0,.T.,.F.)

8 楼

fopen('',12) && 读写打开,应该没问题才对吧,起码我没遇到?能解释一下么?

9 楼

看来真的有问题,但不知道怎么解释啊,进入死循环

10 楼

用fopen函数

文件名='abc.txt'
 x=fopen(文件名,12)
 =fclose(x)
 if x=-1
  =messagebox( '该文档已经被其它事务打开',22,"")
  *  你必须将在其它事物下打开的abc.tx文件删除
  *  若你不是在vfp的进程中打开的文件,你应该用API函数去关闭该文件之后,才能删除
  return
 endi

dele file &文件名

我来回复

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