
文本
类型的文件中是不可能存在的,所以可以判断这3个字节就可以了.
function IsBinDfm(const ADfmFileName: string): BooleanVar mBinStream:TMemoryStream
mBuff : array [0..2] of bytebegin mBinStream := TMemoryStream.Createtry mBinStream.LoadFromFile(ADfmFileName)
mBinStream.Read(mBuff, 3)
//前三字节: $FF, $0A, $00
if (mBuff[0] = $FF) and (mBuff[1] = $0A) and (mBuff[2]= $00) then
Result := True else Result := False
finally
mBinStream.Freeendend判断出来后, 再将二进制转为文本格式就容易了.Delphi提供了ObjectResourceToText函数.写法如下:
procedure DfmBin2Txt(ADfmFileName: string)Var inFileStream: TMemoryStream
outFileStream: TFileStreambegin inFileStream := TMemoryStream.Create
inFileStream.LoadFromFile(ADfmFileName)try outFileStream := TFileStream.Create(ADfmFileName, fmCreate)try try inFileStream.Seek(0, soFromBeginning)
ObjectResourceToText(inFileStream, outFileStream)
except
Raise Exception.Create('This dfm is bin, error on trans bin to txt.')endfinally
inFileStream.Freeendend至此,大功告成!
这样大的数据量,用文本文件并不适合,其实完全可以使用SQL之类的数据库,这样检索速度和检索代码都可以大量节省了。
如果使用文件,可阅读的文本文件,检索肯定是效率较低的。提供一个使用自定义文件的思路吧:(注意不是可阅读的文本,只是程序读取方便)
使用纯数值的结构体保存和读取数据,这样每个结构体的大小是固定的,位置可计算。
使用这样的结构体,你的一行数据大约占用48字节或80字节(双精度),不需要空格空行,这样百万条数据也不过是48M大小的文件。欢迎分享,转载请注明来源:内存溢出

