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