注册 登录
编程论坛 VB6论坛

关于 INPUT 函数问题-超出文件尾

renxiaoyao36 发布于 2014-11-02 09:36, 825 次点击
Dim a As Integer
Open (App.Path + "\cptemp\system32.sav") For Input As #1
Input #1, a
Close #1
ListView1.ListItems(1).SubItems(1) = a
红色那一段,会不定时的出现错误。(我有两个程序,另外一个程序不定时打开App.Path + "\cptemp\system32.sav"这个文件并更新数字。
这是另外一个程序的全部代码。
Dim sys32 As Integer
MyFile = Dir("C:\WINDOWS\System32\*.*")
    Open (App.Path & "\sdsave\WINDOWS\system32\" & sys32 & ".sav") For Output As #1
 Print #1, MyFile
   Close #1
 sys32 = sys32 + 1
 Open (App.Path & "\cptemp\system32.sav") For Output As #3
 Print #3, sys32
bksys32:
On Error GoTo ersys32
MyFile = Dir
    Open (App.Path & "\sdsave\WINDOWS\system32\" & sys32 & ".sav") For Output As #1
Print #1, MyFile
   Close #1
sys32 = sys32 + 1
 Open (App.Path & "\cptemp\system32.sav") For Output As #3
 Print #3, sys32
GoTo bksys32
ersys32:
End
注:上下两端代码不是同一个程序的代码,是两个程序。上面的代码运行之前先执行shell下端代码的程序。
5 回复
#2
renxiaoyao362014-11-02 09:40
补充:上部分的代码是timer1的,interval为1
#3
风吹过b2014-11-02 13:41
在写的过程中,那边读,就会导致
写的时申请了 空间,但还没写完。
这时去读,就超出文件尾了。
进程间资源冲突。

这样的的数据交换的话。
有二种建议。
1、使用 通讯 ,不管是 DDE ,还 是 TCP ,或者 消息, 都可以。
2、使用数据库。写数据时,要先写标志位。

另外还有,使用内存映像文件,但感觉这个还是会导致出错。
------------------
PS ,定时器,最小精度是 100 ,小于100 的,差不多也是按100在使用。
#4
renxiaoyao362014-11-02 19:14
楼上说的我不大懂。。。惭愧,我VB从2013年9月学到现在只学完了所有基础控件,一点点的外部接口语句,API和数据库以及数组我都不会用,不过楼上版主给个示范代码我就懂了,我大部分的学习都是看别人的源代码自己乱试的。
#5
风吹过b2014-11-03 08:01
DDE   不建议使用,这个我不也太清楚怎么用。没用过。
TCP   网络通讯。
消息  新手不建议使用,调试起来很容易导致 VB 死掉。

建议你这个程序使用 TCP 或 数据库。

1、TCP    对应的还有一个 UDP 。
区别一个是有连接,一个是无连接。
TCP,先连接,后发数据,能确定是否收到。
UDP,不管连接,直接发数据,不能确定是否收到。
先建立一个主机,开启一个侦听端口,这个作为服务器端。你这里可以把接收数据的当作服务器端。
建立客户机,连接服务器端侦听的端口,连接成功后,每次数据更新,都把数据发给 服务器端。
服务器端,收到数据后就可以显示出来。
代码你百度一下,大把的有。

2、数据库。
简单一点的数据库,就使用 MDB 吧。
可以使用 data 控件绑定数据库中的数据表,然后不断的更新第一条记录的该字段。
显示端,也绑定该表,然后不断读第一条记录的该字段,发现数据有变化,变立刻显示该字段。
这个百度上也有大把的代码。
#6
renxiaoyao362014-11-03 16:05
我这些都是本地运行,目标是在无网络连接的情况下运行。所以,楼上说的我不能用。。。不过,我还是自己解决了。TIMER计时器中的代码前我加了
on error resume next
这样子就好了。
1