主题:-- 有时删除一个文件,会出现存取错误,如何避免? ---
琅拿度
[专家分:2820] 发布于 2010-01-29 09:55:00
原因是因为这个文件正被某个程序读取,如何可以判断目标文件可以被删除?从而避免错误出现
回复列表 (共17个回复)
沙发
北京惬意 [专家分:1330] 发布于 2010-01-29 10:49:00
有时不得以我就用下面的方法解决.
ON ERROR AA=1 &&错误陷阱
DELE FILE 文件名.扩展名
ON ERROR
板凳
hw2007name [专家分:4790] 发布于 2010-01-29 12:00:00
用以下方法判断文件是否在使用最好:(这次cbl518老师的方法)
cFname="d:\teat.dbf"&&一个你要删除的文件
AA=0
ON ERROR AA=1 &&错误陷阱
RENAME (cFname) TO (cFname)
ON ERROR
if AA=1
?"文件正被其它程序使用!"
return
endif
3 楼
琅拿度 [专家分:2820] 发布于 2010-01-29 12:59:00
RENAME (cFname) TO (cFname)???
什么意思?
我也是这么想,我以为有一些什么更直接的方法呢
4 楼
0901chang [专家分:10660] 发布于 2010-01-29 15:54:00
用fopen函数
文件名='abc.txt'
x=fopen(文件名,12)
=fclose(x)
if x=-1
=messagebox( '该文档已经被其它事务打开',22,"")
return
endi
* 删除文件
。。。。。。。
5 楼
琅拿度 [专家分:2820] 发布于 2010-01-29 17:05:00
做了一个比较有趣的实验,表单有一个按键按键代码:
dele file abc.doc
on error retry
实验一:
1、运行表单
2、用word打开abc.doc
3、点击按键
结果:表单一直尝试删除文件,直到我关闭word,才成功删除,消停
实验二:
1、用word打开abc.doc
2、运行表单
3、点击按键
结果:提示错误,不能存取
想不通?
6 楼
琅拿度 [专家分:2820] 发布于 2010-01-29 17:24:00
还是用乌鸦兄的方法吧:
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 楼
hw2007name [专家分:4790] 发布于 2010-01-29 17:39:00
下面是本人程序中用来判断一个文件是否正被使用的自定义函数
其中 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 楼
琅拿度 [专家分:2820] 发布于 2010-01-29 18:20:00
fopen('',12) && 读写打开,应该没问题才对吧,起码我没遇到?能解释一下么?
9 楼
琅拿度 [专家分:2820] 发布于 2010-01-29 18:45:00
看来真的有问题,但不知道怎么解释啊,进入死循环
10 楼
0901chang [专家分:10660] 发布于 2010-01-30 13:45:00
用fopen函数
文件名='abc.txt'
x=fopen(文件名,12)
=fclose(x)
if x=-1
=messagebox( '该文档已经被其它事务打开',22,"")
* 你必须将在其它事物下打开的abc.tx文件删除
* 若你不是在vfp的进程中打开的文件,你应该用API函数去关闭该文件之后,才能删除
return
endi
dele file &文件名
我来回复