var
Wave1ReceBuf:array[0..30000]of word;
Wave2ReceBuf:array[0..30000]of word;
.
.
procedure TForm1.Button1Click(Sender: TObject); 
   var 
   MyFile:TMemoryStream; 
   iLen:Int64; 
   Begin 
   If savedialog1.Execute then 
   begin 
   iLen:=0; 
   MyFile:=TMemoryStream.Create; 
   MyFile.SavetoFile(opendialog1.FileName); 
   iLen:=MyFile.Size;//获得指定TXT文件的大小 
   SetLength(FileBuf,iLen);//设置动态数组的长度为TXT文件的大小 
   MyFile.writeBuffer(Wave1ReceBuf[0],iLen);//写入TXT文件全部数据 
     MyFile.writeBuffer(Wave2ReceBuf[0],iLen);//写入TXT文件全部数据
   FreeAndNil(MyFile); 
   end; 
  end; procedure TForm1.Button2Click(Sender: TObject); 
   var 
   MyFile:TMemoryStream; 
   iLen:Int64; 
   Begin 
   If opendialog1.Execute then 
   begin 
   iLen:=0; 
   MyFile:=TMemoryStream.Create; 
   MyFile.LoadFromFile(opendialog1.FileName); 
   iLen:=MyFile.Size;//获得指定TXT文件的大小 
   SetLength(FileBuf,iLen);//设置动态数组的长度为TXT文件的大小 
   MyFile.ReadBuffer(Wave1ReceBuf[0],iLen);//读取TXT文件全部数据 
     MyFile.ReadBuffer(Wave2ReceBuf[0],iLen);//读取TXT文件全部数据
   FreeAndNil(MyFile); 
   end; 
  end; 
总感觉不对,如果我想保存为txt文件,然后读出数据后,还要转换,strtoint().比如两个缓冲,怎么识别呢?

解决方案 »

  1.   

    你要使用一个结构啊。比如上面的数据,结构可以这样定义:
    TStrItem=Record
        index:integer;//索引,相当于等号前面的1
        Length:integer;//内容长度,相当于6422*17014的字符串长度
        str:string;//字符串的内容
    end;TStr=Record
        StrItemCount:integer;//数组的数量
        item:array   of   TStrItem;
    end;
    在使用的时候,创建这个结构,然后进行读写操作,具体方法如下:
    写入流:
        1,先写入StrItemCount;
        2,然后使用循环写入item内容,每个item内容,先写index,在写Length,最后写str。
    读取的时候是关键,这样读取:
        1,先读入sizeof(integer)长度的流数据,这个就是StrItemCount的数值,根据这个数值循环读取item内容;
        2,每个item内容这样读取:(1)先读取sizeof(integer)长度的数据,为index的内容;(2)再读取sizeof (integer)长度的数据,为后面真正字符串的内容长度;(3)最后根据长度,读取这个长度的数据,就是str的内容了;
        3,通过循环,数据就读出来了。别的结构,你根据这个思路,自己组织了