我想存一些数据到本地的文件上,存成二进制文件,用TFileStream实现.但是发现用TFILESTREAM的Write方法写文件会把原来的内容全覆盖,如果我想每次打开文件后从最后开始写起怎么办呢?还有别的写文件的方案吗?
解决方案 »
- 请问绑定树型结构问题??
- BHO插件,自动更新如何实现?据说SOCKET不行,有什么方案能从服务器上下载文件吗?
- 请教 Delphi6.0 另类安装问题
- dbgrid显示SQL2000的文本格式的内容时不能正常显示
- 记录选择问题
- quickreport的sub detail中的TQRDBRichText如果为空,后面的内容(在同一个sub detail中)如何实现自动往上提?
- 如何将ActionManager的Category及Action动态导入ActionMainMenuBar?
- 如何将自己定义类的实例保存在流中,并恢复出来,救火,多谢!!
- 菜鸟问题!请教各位帮助!
- 如何实现象ASpack的win32 dll,exe压缩?非常急!
- com组件的接口方法能否使用自定义类作为参数,还是有什么限制?
- 请问如何定义常量
http://138soft.com/htm/AuthorArt/index.htm你打开文件的时候定位下指针
Function Seek(Offset:Longint;Origint:Word):Longint;virtual;abstract;
参数Offset为偏移字节数
参数Origint指出Offset的实际意义,其可能的取值如下:
soFromBeginning:Offset为移动后指针距离数据开始的位置。此时Offset必须大于或者等于零。
soFromCurrent:Offset为移动后指针与当前指针的相对位置。
soFromEnd:Offset为移动后指针距离数据结束的位置。此时Offset必须小于或者等于零。该方法返回值为移动后指针的位置。
我已经定位到文件末尾再写的,还是会覆盖.源码在此:
procedure WriteDATA(pData : PDATA );
Var
fileStream: TFileStream;
Begin
fileStream := TFileStream.Create('data.tem',fmcreate);
fileStream.Seek(0,soFromEnd);
fileStream.Writebuffer(pDATA^,sizeof(DATA));
fileStream.Free;
End;
fmOpenReadWrite吧??
Var
fileStream: TFileStream;
Begin
if not FIleExists('data.tem') then
begin
fileStream := TFileStream.Create('data.tem',fmcreate);
fileStream.Seek(0,soFromBeginning)
else
begin
fileStream := TFileStream.Create('data.tem',fmOpenWrite or fmShareDenyNone);
fileStream.Seek(0,soFromEnd);
end;
fileStream.Writebuffer(pDATA^,sizeof(DATA));
fileStream.Free;
End;
append(f);//这一句经典,在文件尾部添加数据
write(f,~~~);
read(f,~~~);呵呵,即便是用filestream也可以现把文件中的数据保存下来(保存到内存中),然后再一气写进文件里面么。这样写之前还可以排序,提高数据的访问效率。