FileExists会锁定改文档吗?[已解决]
本帖最后由 cfxqm 于 2010-11-11 10:34 编辑我想编个程序监控某个文档,当此文档被修改后向邮箱发送邮件。程序如下:#include<SmtpMailer.au3>
Const $FileName="E:\TBReport\Report.txt"
Local $FileTime,$yyyymd
$FileTime = _GetFileTime()
While (@HOUR>=8 And @HOUR <=23)
$yyyymd = _GetFileTime()
If($FileTime <> $yyyymd) Then;检查文件是否被修改过(修改过时间会变化)
$FileTime = $yyyymd
_SendMail() ;如果修改过则以此文件作为附件发送邮件
EndIf
Sleep(10000) ;10秒钟检查一次文件
WEnd
Func _GetFileTime()
Local $file,$t
If FileExists($FileName) Then ;检查报告文件是否存在
$t =FileGetTime($FileName,0,1);获取文件建立的时间
If Not @error Then
Return $t
EndIf
Else ;建立一个新文件
$file = FileOpen($FileName, 1)
If $file = -1 Then
MsgBox(0, "错误", "无法打开目标文件。",5)
Exit
EndIf
FileClose($file)
EndIf
EndFunc
Func _SendMail()
省略
代码在运行时,发送邮件正常,但是在我试着手动打开该文档,修改后保存时,有时候能保存,有时候不能保存,提示“不能创建文件,请确认路径和文件名是否正确”。似乎文件被写保护了,可能是被我所运行的程序打开后没关闭。但是查帮助文件看不出FileExists会锁定啊。是什么原因呢? 应该是第24行FileOpen的原因 从程序结构上来看,由于文档一直存在,因此23~30行不会执行。我把FileOpen,FileClose语句删掉后还是会出现这个问题。 现象是,有时候修改后能保存,有时候不能保存。不能保存时,取消后,再修改又能保存。难道是修改的时候碰上FileExists或者FileGetTime语句正在执行就不能保存了吗?有什么方法能避免呢? 回复 4# cfxqm If FileExists("E:\TBReport\Report.txt") <> 0 Then MsgBox(0, "", "文件存在")
If FileExists("E:\TBReport\Report.txt") = 0 Then MsgBox(0, "", "文件不存在") 我将程序精简成下面的代码,还是会出现这个现象。
看来是FileGetTime的问题了。#include<SmtpMailer.au3>
Const $FileName="E:\TBReport\Report.txt"
Local $FileTime,$yyyymd
$FileTime = FileGetTime($FileName,0,1)
While (@HOUR>=1 And @HOUR <=23)
$yyyymd = FileGetTime($FileName,0,1)
If($FileTime <> $yyyymd) Then;检查文件是否被修改过(修改过时间会变化)
$FileTime = $yyyymd
_SendMail() ;如果修改过则以此文件作为附件发送邮件
EndIf
Sleep(10000) ;10秒钟检查一次文件
WEnd 注释1行、11行看看 谢谢3mile,是发送邮件的问题。现在知道如何处理了:)
页:
[1]