我们对文件一类的东西存入数据库,一般就是存放一个文件的相对路径,到要使用该文件是就根据该相对路径进行相应的获取,而我现在要做的是通过PB中的数据流的方式把文件以二进制的方式进行存取。
该方法通过数据流的形式读取文件并返回一个BLOB数据类型
可以通过pb中的Updateblob对Image字段进行更新
//====================================================================
// Function: f_readfile()
//--------------------------------------------------------------------
// Description: 读取相应的文件信息
//--------------------------------------------------------------------
// Arguments:ps_file(包含完整路径名的文件)
//--------------------------------------------------------------------
// Returns: blob
//--------------------------------------------------------------------
// Author: SX Date: 2007年02月01日 16时00分00秒
//--------------------------------------------------------------------
// Modify History:
//
//====================================================================
Blob Lb_File,Lb_FileTemp
Long Ll_FileLen
Integer Li_FileNum,i
Long Ll_Loops,Ll_Bytesread,Ll_NewPos
//判断文件大小
Ll_FileLen = FileLength(ps_file)
Li_FileNum = FileOpen(ps_file,StreamMode!,Read!,LockRead!)
IF Ll_FileLen > 32765 THEN
IF Mod(Ll_FileLen,32765) = 0 THEN
Ll_Loops = Ll_FileLen/32765
ELSE
Ll_Loops = (Ll_FileLen/32765) + 1
END IF
ELSE
Ll_Loops = 1
END IF
// Read the file
Ll_NewPos = 1
FOR i = 1 to Ll_Loops
Ll_Bytesread = FileRead(Li_FileNum, Lb_FileTemp)
Lb_File = Lb_File + Lb_FileTemp
Ll_NewPos = Ll_NewPos + Ll_Bytesread
FileSeek(li_FileNum, Ll_NewPos, FromBeginning!)
NEXT
FileClose(Li_FileNum)
Return lb_File
该方法从库中的Image字段中以数据流的形式把文件读取出来并重新组织文件
//====================================================================
// Function: F_WriteFile()
//--------------------------------------------------------------------
// Description: 读取数据库中的文件并写出
//--------------------------------------------------------------------
// Arguments:ps_file(文件及其完整路径)
//--------------------------------------------------------------------
// Returns: None
//--------------------------------------------------------------------
// Author: SX Date: 2007年02月08日 16时00分00秒
//--------------------------------------------------------------------
// Modify History:
//
//====================================================================
Long Ll_FileLen
Long Ll_Pos,Ll_Bytes
Integer i,Li_Loops,Li_FileNum
Blob Lb_Temp
Ll_FileLen = Len(pb_fileblob)
IF Ll_FileLen > 32765 THEN
IF Mod(Ll_FileLen,32765) = 0 THEN
Li_Loops = Long(Ll_FileLen/32765)
ELSE
Li_Loops = Long(Ll_FileLen/32765) + 1
END IF
Li_FileNum = FileOpen(ps_file,StreamMode!, Write!, Shared!, Replace!)
Ll_Pos = 1
FOR i = 1 TO Li_Loops
Lb_Temp = BlobMid(pb_fileblob,(i - 1) * 32765 + 1,32765)
Ll_Bytes = FileWrite(li_FileNum,Lb_Temp)
Ll_Pos = Ll_Pos + Ll_Bytes
FileSeek(li_FileNum, Ll_Pos, FromBeginning!)
NEXT
FileClose(li_FileNum)
ELSE
li_FileNum = FileOpen(ps_file, StreamMode!, Write!, Shared!, Replace!)
FileWrite(li_FileNum,pb_fileblob)
FileClose(li_FileNum)
END IF