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

  • 主题发起人 主题发起人 happy_boy
  • 开始时间 开始时间
这说的就是可能会有超长的(比原来记录要多)的记录,那要如何处理呢?
 
那么你的纪录不是等长的?那麻烦啦
 
那你说像Foxmail这样的软件不也是自定义的数据文件吗?
它是如何做到的呢?
 
不知道你所说的等长是什么意思,我写入那个文件的都是一个记录
a = record
ab : array[0..12]of char;
ac : Longint;
end;
b:a;
我写入的都是B,只是B的成员的值不一样不知道这是不是不等长?
 
这样的话是等长的,不用怕覆盖
 
O!那我明白了,这样就是等长,那你说如何实现删除功能呢?如果要删除一个
记录好像要操作其后的所有数据向前移吧?有没有好的方法?效率高的.
 
文件操作,最方便的还是用文件流,而且对于你所说的这类结构,最好生成两个文件,一个
是每个记录的内容,另一个是除内容外的其它信息,再加上一个指针,指出这个记录的内容
在内容文件中的位置。
至于删除、插入肯定都会导致记录中指针的改变,所以在删除或是插入的记录之后,这个
指针都应该重写,至于内容文件你可以进行删除,也可以不删除,删除的话速度慢些,
不删除的话会产生垃圾,看你的具体情况啦。
 
其实留着垃圾也没关系,看看foxpro的数据文件:dbf
人家是商业的数据库都可以留着垃圾,
你也可以象它一样,加多一个变量指示是否本纪录已经给删除的
另外,可以另外设一个功能,compact,当选择了compact的时候才压缩垃圾
不用删一条压缩一条
 
我是生成两个文件的,一个是索引,一个是内容.
指针我也保存了,可删除某个记录,一定要重写
这个指针的,新加的记录都在文件尾,位置保存
在指针中,要是删除记录就一定要调整一遍的
可是这样做会很慢的,我应该如何做会好一些
呢?
谢谢大家了。
 
O!谢谢大家了加分
 
后退
顶部