关于文件操作的问题?(100分)

  • 主题发起人 主题发起人 happy_boy
  • 开始时间 开始时间
H

happy_boy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用FileWrite在文件中写入的数据可是我不想保存它了我应该
如何做呢?
我知道只有只有调用了FileClose就保存了文件,
可是在不调用它关闭程序的时候会出错的?
谢谢了!
 
close了再DeleteFile啦
 
你说的是把文件删除呀?
不是这个意思,
我的文件中保存了好多的记录,
我是说我的程序如果用了FileWrite写了一条记录,
又不想要了, 我应该如何做?
 
笨办法--每次写文件时先备份一个,
写入失败或取消时就恢复原来的文件。
 
:(
呵呵.... 我也想过这个, 可是....不好吧.
:)
还有办法吗?
 
呵呵,方法虽然笨 但最实用:)
当你写入失败时,(非人为)
可以恢复到原来的文件!!!
如果没有备份,就要XXX了 ^_^
 
一时也想不到什么好的方法,先这样试试:
打开文件之前先复制一个备份,写入数据后不想保存就把备份弄回来
 
O!不知道内存映射文件可以吗?
我又不会用这个不知道是否可以。
 
如果不是text file类型,如果新加的内容是在文件的最后,可以FileSeek回去,Truncate之
 
如果是在文件的中心呢?
 
a = record
ab : String;
ac : Longint;
end;
a.ab := 'aaa';
a.ac := 12234 ;
这个a我如果写入文件后保存过了, 我再想改变
a.ab :='aaaaaa';
a.ac := 1233445;
再保存一下, 那么下一条记录的偏移位置会变吗?
 
哦,原来是自定义记录文件,
可以用一个变量存放指针位置
然后用SEEK定位配合READ,就可
读出记录值修改!
 
是的是自定义的记录文件。
您的这个方法可以的。
我想知道,我上面说的那个东西会影响下一个记录的偏移吗?
 
没试过,不敢乱说 ^_^
你可以试试看呀!
 
采用临时文件,所有操作只针对临时文件进行。当确定要保存时,再覆盖原始文件,就像
MSWord
 
你的record有问题,不能使用string,string其实本身是个pointer指向另外一片内存,
string本身只有4个字节(指针)。必须用 array[0..nnn] of char
另外在文件中间写入是覆盖原来位置的内容的,写入位置的前、后部分什么都没改变
 
还有,如果是在文件中心修改,那么要恢复的话,最简单就是拷贝临时文件,但是
1、如果一般来说,保存的机会大,那么在正式文件修改,
恢复的话用备份的文件覆盖回去、保存的话删掉临时文件就可以了
2、如果一般来说,取消的机会大,那么在临时文件修改,
取消的话删掉临时文件就可以了,保存的话要用临时文件覆盖正式文件
 
to Pipi.:谢谢你,我知道那个String有问题,可是如果用TMemoryStream来保存是不是就没有
问题呢?
你是说我改变了某条记录之后再保存,这条记录的长度不会发生变化是吗?
 
文件流?
 
我不理解你说的,用TmemoryStream是什么意思?反正如果你保存的是record,那里面不能
用string,因为string的内容是个指针,真正的字符串在别处
另外纪录已经保存了,seek回来再写,是覆盖的,前后的内容、位置不变,如果你重写的
纪录超长,可能覆盖后一条纪录的内容,当然如果纪录长度是等长的旧没关系了
 
后退
顶部