我想把动态数组的内容写入文件,该怎么操作? 
数组的元素是记录型的。

解决方案 »

  1.   

    使用Low和High,再写入文本文件...
      

  2.   

    数组是这样定义的:
    type
      TMOInf = Record
        op_cd: String;
        mo_no: String;
    mo_mob_use: String;
    mo_phone: String;
    mo_content: String;
    mo_coding: Integer;
    mo_pid: Integer;
    mo_udhi: Integer;
    corp_id: String;
    mo_reserve: String;
    mo_flag: Integer;
      end;m_Queue: Array of TMOInf;
      

  3.   

    记录元素不能用string类型,因为string是不定长的
    改为:array[0..Len-1] of Char;
    或者:string[len];type
      TMOInf = record
        op_cd: string[20]; //具体大小根据实际需要定义
        mo_no: string[20];
        mo_mob_use: string[20];
        mo_phone: string[20];
        mo_content: string[20];
        mo_coding: Integer;
        mo_pid: Integer;
        mo_udhi: Integer;
        corp_id: string[20];
        mo_reserve: string[20];
        mo_flag: Integer;
      end;const
      cFileHead: array[0..2] of Char = 'que'; //文件头,避免读取其他格式的文件procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
      m_Queue: array of TMOInf;
    begin
    //////写入
      { todo : m_Queue赋值 }
      SetLength(m_Queue, 2);
      m_Queue[1].mo_reserve := '测试!';  with TFileStream.Create('C:\temp\temp.dat', fmCreate) do try
        Write(cFileHead[0], SizeOf(cFileHead));
        I := Length(m_Queue);
        Write(I, SizeOf(Integer));
        for I := Low(m_Queue) to High(m_Queue) do
          Write(m_Queue[I], SizeOf(TMOInf));
      finally
        Free;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      I: Integer;
      m_Queue: array of TMOInf;
      vFileHead: array[0..2] of Char;
    begin
    //////读出
      with TFileStream.Create('C:\temp\temp.dat', fmOpenRead) do try
        if Read(vFileHead[0], SizeOf(vFileHead)) <> SizeOf(vFileHead) then Exit;
        if vFileHead <> cFileHead then Exit;
        Read(I, SizeOf(Integer));
        SetLength(m_Queue, I);
        for I := Low(m_Queue) to High(m_Queue) do
          Read(m_Queue[I], SizeOf(TMOInf));
      finally
        Free;
      end;
      { todo : 输出m_Queue }
      if High(m_Queue) <= 1 then ShowMessage(m_Queue[1].mo_reserve);
    end;
      

  4.   

    建议
    TMOInf = packed record