PB9读写大容量文件的方法
在pb9中,系统自带的读写文件的函数是fileread和filewrite,这两个函数最大的限制是读写量:一次最大只能读写32765字节的数据。这个限制导致它本身不适用于读写大容量的文件。下面给出使用流stream方式读写文件的方法,包括两个全局函数f_readfile(string as_file)和f_writefile(blob ab, string as_file),分别用于读文件和写文件。
(1)读文件函数:blob f_readfile(string as_file)
global function blob f_readfile (string as_file);
//pb9读取文件内容的方法by yyoinge 20111104
blob lb
if not fileexists(as_file) or filelength(as_file) = 0 then return lb
oleObject ADODB
ADODB = CREATE OLEObject
if ADODB.ConnectToNewObject("ADODB.Stream") <> 0 then
messagebox('提示', '无法连接【ADODB.Stream】!无法读文件!')
return lb
end if
ADODB.Type = 1 //二进制数据Binary
ADODB.Mode =3 //具有读/写权限
ADODB.Open()
ADODB.LoadFromFile(as_file)
ADODB.Position = 0 //Position为0才能设置Charset
ADODB.Type = 1 //blob数据
lb = ADODB.Read()
//清空缓冲区数据
ADODB.flush()
//关闭流
ADODB.Close()
destroy ADODB
return lb
end function
(2)写文件函数:integer f_writefile(blob ab, string as_file)
global function integer f_writefile (blob ab, string as_file);
//pb9写文件内容的方法by yyoinge 20111104
int li = 1
oleObject ADODB
ADODB = CREATE OLEObject
if ADODB.ConnectToNewObject("ADODB.Stream") <> 0 then
messagebox('提示', '无法连接【ADODB.Stream】!无法写文件!')
return -1
end if
ADODB.Type = 1 //二进制数据Binary
ADODB.Mode =3 //具有读/写权限
ADODB.Open()
ADODB.Position = 0
ADODB.Write(ab)
try
ADODB.savetofile(as_file, 2)
catch (oleruntimeerror er)
messagebox('提示', '无法写文件到【' + as_file + '】!~r~n可能的原因有:①文件路径不存在,②磁盘空间不够')
li = -1 //无法保存文件,可能的原因有:①as_file有误,②磁盘空间不够
end try
//清空缓冲区数据
ADODB.flush()
//关闭流
ADODB.Close()
destroy ADODB
return li
end function
(3)调用方法
//读取文件E:\a.txt的内容,并写到文件E:\aat.dat中
f_writefile(f_readfile("E:\a.txt"), "E:\aat.dat")
摘自 yyoinge的专栏