请各位帮忙:想把文件保存到一记录类型文件中,这种记录类型该如何定义? ( 积分: 150 )

  • 主题发起人 主题发起人 adibyu
  • 开始时间 开始时间
A

adibyu

Unregistered / Unconfirmed
GUEST, unregistred user!
记录文件的类型定义如下:<br>type<br>&nbsp;&nbsp;TMyFax=packed&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;Autoid:Integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;ReceDate:TDateTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;File:???&nbsp;(记录类型该如何定义?我要把一文件保存到该值中)<br>end;
 
type<br>&nbsp;&nbsp;TMyFax=packed&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;Autoid:Integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;ReceDate:TDateTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;File:pchar;<br>end;
 
to&nbsp;psynet123<br>Pchar?能否说详细点,具体如何实现?如何把一文件写入Pchar类型变量中?
 
还请来帮忙解决这个难题!
 
如果文件大小确定,可以这样<br>type<br>&nbsp;&nbsp;TMyFax=packed&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;Autoid:Integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;ReceDate:TDateTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;File:&nbsp;array[0..9999]&nbsp;of&nbsp;Byte;&nbsp;<br>end;&nbsp;&nbsp;<br>如果文件大小不确定,那这样<br>type<br>&nbsp;&nbsp;TMyFax=packed&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;Autoid:Integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;ReceDate:TDateTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;File:&nbsp;TFileStream;&nbsp;<br>end;&nbsp;&nbsp;<br>//这样其实只是保存个指针,指向一个TFileStream的对象,在使用时需创建和释放。
 
定义就如&nbsp;楼上的就可以了,关键是你怎么把文件写进去和读出来。<br>TMyFax=packed&nbsp;record<br>&nbsp;&nbsp;Autoid:Integer;<br>&nbsp;&nbsp;ReceDate:TDateTime;<br>&nbsp;&nbsp;FileData:&nbsp;array[0..A]&nbsp;of&nbsp;byte;<br>end;&nbsp;<br>如果文件的大小是固定的,那么确定&nbsp;A&nbsp;的值就可以了。<br>如果文件的大小不可预知,那么就要注意读和写的时候的方法了。<br>例如文件的大小大于&nbsp;A&nbsp;的值,那么写记录型文件的时候就要对源文件进行分割保存成为多个记录,读的时候也要按顺序重新组合成为新文件。
 
谢谢各位赐教!<br>&nbsp;&nbsp;我的文件的大小不是固定的.<br>&nbsp;&nbsp;但也不可能像liyinwei说的那样,拆分成多个记录保存,因为这样会影响记录读取时间.<br>&nbsp;&nbsp;如果像nicai_wgl说的使用TFileStream来保存,各位的意见如何?
 
TMyFax=packed&nbsp;record<br>&nbsp;&nbsp;Autoid:Integer;<br>&nbsp;&nbsp;ReceDate:TDateTime;<br>&nbsp;&nbsp;FileSize:integer;<br>end;&nbsp;<br>此记录后跟随着就可以写入文件了,如果后边没有文件,那么FileSize就是0,有文件,那么<br>FileSize就是写入的文件的大小,读的时候,需要动态创建TFileStream,再读取就OK了
 
to&nbsp;xmcccc<br>我的要求是要保存到当前记录中,否则,像你这种方法,当我定位某条记录时,如果记录有几万条,则速度会极慢.所以,希望各位能帮忙想想办法,把文件直接保存在当前记录中.
 
晕,杂个可能保存到记录里,你的是不固定的,如果要定位某条记录,只能自己建一个索引,此外别无他法
 
因为记录型文件的记录字段的长度是固定的,所以在文件大小不确定的情况下,只能分割开来保存。<br>如果要照顾到速度,那建议楼主不要用记录型文件了。<br>还可以用结构化文件、数据库等。
 
保存为流<br>type<br>&nbsp;&nbsp;TMyFax=packed&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;Autoid:Integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;ReceDate:TDateTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;File:&nbsp;TFileStream;&nbsp;<br>end;<br>TFileStream可以保存文件
 
to&nbsp;liyinwei<br>你所说的结构化文件是什么文件?能否说说具体的做法?
 
to&nbsp;hwj_wj123<br>如果使用TFileStream,那又如果把保存到文件中的内容读取到File中去呢?
 
所谓结构化存储方法,实际是把树状文件系统的原理应用到单个的文件中,使得单个文件也能象文件系统一样包含&quot;子目录&quot;,&quot;子目录&quot;还可以包含更深层次的&quot;子目录&quot;,各个&quot;目录&quot;可以含多个文件,把原来需要多个文件存储的内容按树状结构和层次保存到一个文件中去。对清楚磁盘存储的用户来说,很容易理解这种存储方法可以极大程度的提高磁盘空间使用效率。另外便于在单个文件就能明确内容的归属关系和分类关系,再就是在软件分发过程不需要带一大批的分发文件,可以把数据文件归结到一个文件中去。
 
后退
顶部