OPEN
Stream = OPEN FileName [ FOR [ READ | INPUT ] [ WRITE | OUTPUT ] [ CREATE | APPEND ] [ WATCH ] ]
打开一个文件读、写、创建或者追加数据。除非指定CREATE关键字,否则文件必须存在。
-
如果指定
CREATE
关键字,创建新文件或者清空已有文件。
-
如果指定
APPEND
关键字,文件打开后文件指针将指向文件尾。
-
如果指定
READ
或 WRITE
关键字,非缓冲读、写文件。
-
如果指定
INPUT
或 OUTPUT
关键字,缓冲读、写文件。
-
如果指定
WATCH
关键字,解释器将监视该文件。
-
如果从文件中读取至少一个字节,那么
File_Read()
事件处理会被调用。
-
如果向文件中写入至少一个字节,那么
File_Write()
事件处理会被调用。
如果文件成功打开,流对象被返回给Stream变量。
作为缺省,流是带缓冲的。
如果希望使用非缓冲的流,必须明确使用
READ
或
WRITE
关键字。
与其他Basic语言不同,Gambas从来不会删除使用WRITE关键字来打开的文件。
所以,如果新内容少于废弃的老文件内容,一些废弃的老文件内容会保留在新文件的尾部。
为了避免出现这样的问题,打开文件时应该包括CREATE关键字。
错误
消息
|
说明
|
禁止访问(43)
|
不允许对文件的访问请求,
或者路径中的某个目录的路径检索许可被拒绝,
或者文件还不存在且不允许对其父目录写访问。
|
指定文件是目录(46)
|
Filename 指向的是目录。用Dir函数代替!
|
文件或目录不存在(45)
|
Filename 不存在,或者路径中的某个目录不存在或是断开的符号连接。
|
内存不足(1)
|
系统运行内存不足。
|
设备已满(37)
|
Filename 被创建,但是保存 Filename的 设备已没有空间给这个新文件。
|
非目录(49)
|
Filename 路径中某个目录事实上不是目录。
|
系统错误... (42)
|
其他可能的系统错误:
-
解析 Filename 时遇到太多的符号连接。
-
进程中已经有最大数量文件打开。
-
达到系统打开文件总数限制。
-
Filename 指向一个设备专用文件,但是对应的设备不存在。
-
文件是命名管道,并且没有进程为了读取而打开该文件。
-
Filename 指向只读文件系统上的文件,但是有写访问请求。
-
Filename 指向正在执行的可执行映像,但是有写访问请求。
|
示例
' 打印文本文件内容到屏幕
DIM hFile AS File
DIM sLine AS String
hFile = OPEN "/etc/passwd" FOR INPUT
WHILE NOT Eof(hFile)
LINE INPUT #hFile, sLine
PRINT sLine
WEND
' 监视串口
DIM hFile AS File
hFile = OPEN "/dev/ttyS0" FOR READ WRITE WATCH
...
PUBLIC SUB File_Read()
DIM iByte AS Byte
READ #hFile, iByte
PRINT "得到一个字节:"; iByte
END
' 读小字节序格式的BMP文件数据:
DIM hFile AS File
DIM iData AS Integer
hFile = OPEN "image.bmp" FOR INPUT
hFile.ByteOrder = gb.LittleEndian
...
READ #hFile, iData
参见