在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的專欄