找回密码
 加入
搜索
查看: 2999|回复: 8

用 FileOpen() 打开txt文件,返回-1 发生错误,怎么解决?

  [复制链接]
发表于 2010-6-1 14:55:40 | 显示全部楼层 |阅读模式
本帖最后由 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)
发表于 2010-6-1 15:25:04 | 显示全部楼层
本帖最后由 netegg 于 2010-6-1 15:28 编辑

#include<file.au3>
$string = stringright(fileread($file,_filecountlines($file)),4)

第一个问题不知道具体情况解释不了
 楼主| 发表于 2010-6-1 16:33:57 | 显示全部楼层
本帖最后由 crazyowen 于 2010-6-1 16:53 编辑
#include
$string = stringright(fileread($file,_filecountlines($file)),4)

第一个问题不知道具体情 ...
netegg 发表于 2010-6-1 15:25



   
谢谢!

稍微有点笔误,应该是 $string = stringleft(filereadline($file,_filecountlines($file)),4)
发表于 2010-6-1 16:44:59 | 显示全部楼层
不好意思写错了,filereadline
 楼主| 发表于 2010-6-1 17:32:29 | 显示全部楼层
本帖最后由 crazyowen 于 2010-6-1 17:35 编辑

还有第一个问题没有解决~ , 我代码中的 test.txt 文件是 另外一个程序的log 文件, 当我打开那个程序时 , 运行上面代码 就会返回错误“不能打开文件”, 当我关闭那个程序时, 就能正确读取了。
希望帮我分析一下 该怎么办?

我自己想了一个办法,就是在代码最前面添加代码 把 test.txt 复制 一份重命名为 log.txt , 后面fileopen (“log.txt”,0)   ,但有没有更好的办法呢?
发表于 2010-6-1 20:39:25 | 显示全部楼层
另外一个程序打开了txt文件,就是句柄占用着,你的au3程序当然不能再打开了。如果想要读写被其它进程占用的文件,可以说这是一个重量级的问题。
发表于 2010-6-1 21:00:02 | 显示全部楼层
应该是句柄的问题
发表于 2010-6-2 12:33:08 | 显示全部楼层
我也来一段代码:
貌似最短的代码吧??
第一个问题:在偶的代码 中没发现不能用,连续我打开三个相同的文件("test.txt")都发现很正常哇!!(不知道你是什么操作的?)
第二个问题:在代码中,自个看吧!
游客,如果您要查看本帖隐藏内容请回复
 楼主| 发表于 2010-6-2 17:34:15 | 显示全部楼层
已经解决了
最简单的代码如下:
#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)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-2 16:41 , Processed in 0.077946 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表