用 FileOpen() 打开txt文件,返回-1 发生错误,怎么解决?
本帖最后由 crazyowen 于 2010-6-2 17:35 编辑我有两个问题:
第一个:
在另外一个程序正在调用test.tx文件时,用 FileOpen() 打开txt文件,返回-1 发生错误,该怎么解决?
第二个:
test.txt 文件内的 内容是随时改变的(内容不断增加,就像log)。而我需要读取文本最末尾一行的 前4个字
我感觉我写的代码效率不高,有没有更简短更快的方法?
我的代码如下:
$file = FileOpen("test.TXT", 0)
; 检查打开的文件是否可读
If $file = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
; 每次读取一行文本,直到文件结束.
$i = 0
$a = 1
$x = 1
$b = 1
While $a = 1
$line = FileReadLine($file)
If @error = -1 then
$a = 0
$b = StringLeft($x, 4)
MsgBox(0, "最后一行前4位数为:", $b)
Else
$x = $line
$i = $i+1
EndIf
Wend
FileClose($file)
本帖最后由 netegg 于 2010-6-1 15:28 编辑
#include<file.au3>
$string = stringright(fileread($file,_filecountlines($file)),4)
第一个问题不知道具体情况解释不了 本帖最后由 crazyowen 于 2010-6-1 16:53 编辑
#include
$string = stringright(fileread($file,_filecountlines($file)),4)
第一个问题不知道具体情 ...
netegg 发表于 2010-6-1 15:25 http://www.autoitx.com/images/common/back.gif
谢谢!
稍微有点笔误,应该是 $string = stringleft(filereadline($file,_filecountlines($file)),4) 不好意思写错了,filereadline 本帖最后由 crazyowen 于 2010-6-1 17:35 编辑
还有第一个问题没有解决~ , 我代码中的 test.txt 文件是 另外一个程序的log 文件, 当我打开那个程序时 , 运行上面代码 就会返回错误“不能打开文件”, 当我关闭那个程序时, 就能正确读取了。
希望帮我分析一下 该怎么办?
我自己想了一个办法,就是在代码最前面添加代码 把 test.txt 复制 一份重命名为 log.txt , 后面fileopen (“log.txt”,0) ,但有没有更好的办法呢? 另外一个程序打开了txt文件,就是句柄占用着,你的au3程序当然不能再打开了。如果想要读写被其它进程占用的文件,可以说这是一个重量级的问题。 应该是句柄的问题 我也来一段代码:
貌似最短的代码吧??
第一个问题:在偶的代码 中没发现不能用,连续我打开三个相同的文件("test.txt")都发现很正常哇!!(不知道你是什么操作的?)
第二个问题:在代码中,自个看吧!
**** Hidden Message ***** 已经解决了
最简单的代码如下:
#include<file.au3>
; 把数据文件复制一份,防止原txt文件被其他程序占用而不能读写
FileCopy ("test.TXT","log.txt",1)
$file = FileOpen("log.txt", 0)
; 检查打开的文件是否可读
If $file = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
; 读取最后一行前四位数
$string = StringLeft(FileReadLine("log.txt",_filecountlines("log.txt")), 4)
MsgBox(0, "最后一行前4位数为:", $string)
页:
[1]