关于VB6中错误处理的问题,On Error GoTo处理不了,知道的大侠进来帮帮忙,谢谢

Aro0223 2012-05-31 04:10:39
我这有一段代码是关于处理图片的
Open savePath For Binary As #
Put #1, Sum, tempByte(i)
Close #1
在正常运行下是没问题的,当运行中连接的设备突然断电然后在短时间内重新连接上后就会在Put #1, Sum, tempByte(i)
处报错,报的错误是 路径/访问错误
我想用容错处理当错误的时候跳过Put #1, Sum, tempByte(i)直接关闭Close #1,但是On Error GoTo却无法实现,那位遇到过帮下我,谢谢
...全文
568 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-06-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
谢谢,我发现在不是这里的问题,是因为在断开的时候文件被打开了,请问怎么判断一个文件(比如一张图片)是否处于被打开状态呢

因为这个问题属于关联问题我会额外给分的
[/Quote]
如果尝试独占打开某文件出错,则说明该文件正被打开。
open "..." for binary lock read write as #f
of123 2012-06-01
  • 打赏
  • 举报
回复
这样不行吗?

Open savePath For Binary As #
On Error Resume Next
Put #1, Sum, tempByte(i)
Close #1
On Error Goto 0


Aro0223 2012-05-31
  • 打赏
  • 举报
回复
谢谢,我发现在不是这里的问题,是因为在断开的时候文件被打开了,请问怎么判断一个文件(比如一张图片)是否处于被打开状态呢

因为这个问题属于关联问题我会额外给分的
熊孩子开学喽 2012-05-31
  • 打赏
  • 举报
回复
正好手头上在写的一个程序, 拿一个读文件的模块给你看看, 你得稍微改改:

Private Sub ListKeyWord(ByVal Fn As String)
Dim F As Long
Dim Tmp As String
On Error GoTo Errline
F = FreeFile
Open Fn For Input As F
Do While Not EOF(F)
Line Input #F, Tmp
......
Loop
Close F
......
Exit Sub
Errline:
Close F
End Sub

写文件也差不多
Aro0223 2012-05-31
  • 打赏
  • 举报
回复
我这里是这么个情况,当断开后1秒钟就会将图片加载到一个显示的文件上,也就是说这时候该图片是处于打开的状态,所以无法继续写入
Aro0223 2012-05-31
  • 打赏
  • 举报
回复
我这里是用的是Binary方式啊,是在文件正在写入的时候串口服务器服务器突然断电然后1~2秒内又连上后在put的时候报错的,我还没美白在这里该怎么解决,您能再细说一下吗,谢谢
贝隆 2012-05-31
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Command1_Click()

On Error GoTo errSub
Open savePath For Binary As #1
Put #1, Sum, tempByte(i)
Close #1
Exit Sub
errSub:

End Sub
Aro0223 2012-05-31
  • 打赏
  • 举报
回复
Veron_04
谢谢你的回答,但是我还是没没明白,当put这里报错,怎么跳过去,因为已打开指定路径的文件,所以必须要关闭它,不然在下次操作的时候还会出问题
贝隆 2012-05-31
  • 打赏
  • 举报
回复
Open 语句


能够对文件输入/输出 (I/O)。

语法

Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

Open 语句的语法具有以下几个部分:

部分 描述
pathname 必要。字符串表达式,指定文件名,该文件名可能还包括目录、文件夹及驱动器。
mode 必要。关键字,指定文件方式,有 Append、Binary、Input、Output、或 Random 方式。如果未指定方式,则以 Random 访问方式打开文件。
access 可选。关键字,说明打开的文件可以进行的操作,有 Read、Write、或 Read Write 操作。
lock 可选。关键字,说明限定于其它进程打开的文件的操作,有 Shared、Lock Read、Lock Write、和 Lock Read Write 操作。
filenumber 必要。一个有效的文件号,范围在 1 到 511 之间。使用 FreeFile 函数可得到下一个可用的文件号。
reclength 可选。小于或等于 32,767(字节)的一个数。对于用随机访问方式打开的文件,该值就是记录长度。对于顺序文件,该值就是缓冲字符数。


说明

对文件做任何 I/O 操作之前都必须先打开文件。Open 语句分配一个缓冲区供文件进行 I/O 之用,并决定缓冲区所使用的访问方式。

如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output、或 Random 方式打开文件时,可以建立这一文件。

如果文件已由其它进程打开,而且不允许指定的访问类型,则 Open 操作失败,而且会有错误发生。

如果 mode 是 Binary 方式,则 Len 子句会被忽略掉。

重要 在 Binary、Input 和 Random 方式下可以用不同的文件号打开同一文件,而不必先将该文件关闭。在 Append 和 Output 方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件。
贝隆 2012-05-31
  • 打赏
  • 举报
回复
Put 语句


将一个变量的数据写入磁盘文件中。

语法

Put [#]filenumber, [recnumber], varname

Put 语句的语法具有以下几个部分:

部分 描述
filenumber 必要。任何有效的文件号。
recnumber 可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),指明在此处开始写入。
varname 必要。包含要写入磁盘的数据的变量名。


说明

通常用 Get 将 Put 写入的文件数据读出来。

文件中的第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。如果省略 recnumber,则将上一个 Get 或 Put 语句之后的(或上一个 Seek 函数指出的)下一个记录或字节写入。所有用于分界的逗号都必须罗列出来,例如:

Put #4,,FileBuffer

下列规则适用于以 Random 方式打开的文件:

如果已写入的数据的长度小于 Open 语句的 Len 子句指定的长度,则 Put 以记录长度为边界写入随后的记录。记录终点与下一个记录起点之间的空白将用现有文件缓冲区内的内容填充。因为填入的数据量无法确定,所以一般说来,最好设法使记录的长度与写入的数据长度一致。如果写入的数据长度大于由 Open 语句的 Len 子句所指定的长度,就会导致错误发生。


如果写入的变量是一个可变长度的字符串,则 Put 先写入一个含有字符串长度的双字节描述符,然后再写入变量。Open 语句的 Len 子句所指定的记录长度至少要比实际字符串的长度多两个字节。


如果写入的变量是数值类型的 Variant 则 Put 先写入两个字节来辨认 Variant 的 VarType,然后才写入变量。例如,当写入 VarType 3 的 Variant 时,Put 会写入六个字节:其中,前两个字节辨认出 Variant 为 VarType 3 (Long),后四个字节则包含 Long 类型的数据。Open 语句的 Len 子句所指定的记录长度必须至少比储存变量所需的实际字节多两个字节。
注意 Put 语句可用来将一个 Variant 数组写入磁盘,但不能用来将包含数组的标量 Variant 写入磁盘。Put 也不能用来将对象写入磁盘。

如果写入的变量是 VarType 8 (String) 的 Variant,则 Put 先写入两个字节来辨认 VarType,接下来的两个字节则指出字符串的长度,然后再写入字符串数据。Open 语句的 Len 子句所指定的记录长度必须至少比实际的字符串长度多四个字节。


如果写入的变量是动态数组,则 Put 写入一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensions。Open 语句的 Len 子句所指定的记录长度必须大于或等於为读出数组数据和数组描述符所需要的所有字节数总和。例如,在将数组写入磁盘时,下列数组声名需要 118 个字节的空间:
Dim MyArray(1 To 5,1 To 10) As Integer

这 118 个字节的分配情况如下:18 个字节用于描述符 (2 + 8 * 2),100 个字节用于数据 (5 * 10 * 2)。


如果写入的变量是大小固定的数组,则 Put 只写入数据。它不将描述符写入磁盘。


如果写入的变量是任何其他类型的变量(不是可变长度的字符串或 Variant£©,则 Put 只写入变量数据。Open 语句的 Len 子句所指定的记录长度必须大于或等於要读出的数据长度。


Put 写入用户定义类型的元素时,除了不在元素之间进行填充外,好象是单独地写入每一个元素。在磁盘上,有一个描述符位于 Put 写入的用户定义的类型的动态数组之前,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensions。Open 语句中的 Len 子句所指定的记录长度必须大于或等於为写入各个元素(包括任何数组及其描述符在内)所需的全部字节数总和。
对于以 Binary 方式打开的文件,上述所有 Random 规则都适用,除了:

Open 语句中的 Len 子句不起作用。Put 语句连续地将所有变量写入磁盘;也就是说,两个记录之间没有任何填充。


对于任何不属于用户定义的类型的数组,Put 只写入数据。它不会写入描述符。


对于非用户定义的类型的可变长度字符串,Put 将其直接写入,而无须有双字节描述符。写入的字节数等於字符串所包含的字符数。例如,下列语句将十个字节写入文件号为 1 的文件中:
VarString$ = String$(10, )
Put #1,,VarString$

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧