定义一个无类型文件可否?
用Tmemorystream存储到文件……

解决方案 »

  1.   

    只有S:String[20];这样了,不然就用无类型文件那就好麻烦了!
    改你的记录数组为一个记录,给你一个例子吧
    type
      A=Record //定长度为100项
        x:integer;
        y:integer;
        S:String[20];  //定长度为20个字符
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
      F:File of A;
      aRecord,bRecord:A;
      i:integer;
    begin
      AssignFile(F,'D:\1');
      if FileExists('D:\1') then
        Reset(F)
      else
        Rewrite(F);
      i:=FileSize(F);
      Seek(F,i);
      aRecord.x:=1;
      aRecord.y:=2;
      aRecord.S:='Love';
      Write(F,aRecord);
      Seek(F,i);
      Read(F,bRecord);
      ShowMessage(bRecord.S);
      CloseFile(F);
    end;
      

  2.   

    那么有什么折中办法,我现在需要尽量减少内存消耗,我在开发一个RPG游戏,但一个NPC信息的文件长度有15MB,大部分空间实际上都被浪费,有什么办法能够减少这种浪费吗?
      

  3.   

    A=Array of Record
        x:integer;
        y:integer;
        S:String;  
      end;
    大家还有什么思路没有?
    楼上大哥的i:=FileSize(F);是否要改为I:=SizeOf(F);?
      

  4.   

    我打错了;
    i:=FileSize(F);是否要改为I:=SizeOf(aRecord);?
      

  5.   

    var
      reclength,wrotennum:integer;
      buffer:array of char;for i:=1 to n do
    begin
      with a[n] do
      begin
        RecLength:=sizeof(x)+sizeof(y)+length(s);
        write(f,x);
        write(f,y);
        setlength(buffer,length(s));
        strpcopy(buffer,s);
        blockwrite(f,buffer,length(s),wrotennum);
      end;
    end;
      

  6.   

    var
      reclength,wrotennum:integer;
      buffer:array of char;for i:=1 to n do
    begin
      with a[n] do
      begin
        RecLength:=sizeof(x)+sizeof(y)+length(s);
        write(f,RecLength);  //漏写一句,读出时先读此integer,然后按长度读出这条记录
        write(f,x);
        write(f,y);
        setlength(buffer,length(s));
        strpcopy(buffer,s);
        blockwrite(f,buffer,length(s),wrotennum);
      end;
    end;
      

  7.   

    d983074(d983074)的方法是用来写入文件吧?但如何读出呢?
    我现在是用TFileStream做,s定义为string[20],写操作时先在文件头写一个Count,代表数组元素个数,然后一个记录一个记录的写。读操作时,先读出Count,再根据Count设置数组长度,然后再一个一个记录的读出来。