var
  fs,fs2 :TFileStream;
  s :string;
begin
  s := 'abc';
  fs := TFileStream.Create('1.tp',fmCreate);
  fs2 := TFileStream.Create('1.jpg',fmOpenRead);
  fs.Write(s,sizeof(s));
  fs.Seek(sizeof(s),soBeginning);
  fs.CopyFrom(fs2,fs2.Size);
  fs.Write(fs,fs.Size);
  fs.Free;
  fs2.Free;
end;
请问哪位高手知道生成'1.tp'文件应该怎样读取?

解决方案 »

  1.   

    你要做什么?你的程序有问题
     fs.Write(s,sizeof(s)); //sizeof(s)永远等于4,你的'abc'有用吗?
      

  2.   

    s := 'abc'; 
      fs := TFileStream.Create('1.tp',fmCreate); 
      fs2 := TFileStream.Create('1.jpg',fmOpenRead); 
      fs.Write(s,sizeof(s)); //写入'abc'
      fs.Seek(sizeof(s),soBeginning); //把文件指针移到开始,这等于没有上面那句
      fs.CopyFrom(fs2,fs2.Size);//进行文件流复制 
      fs.Free; 
      fs2.Free; 
      

  3.   


    var
      f:tfilestream;
      bytesread:char;
      sread:array[0..1024] of char;  
      s:string;
      i:integer;
    begin
      filedir:=edit1.text;
      f:=tfilestream.Create('1.tp',fmopenread);
      f.Seek(0,sofrombeginning);
      for i:=0 to f.Size-1 do
      begin
        f.ReadBuffer(bytesread,1);
        s:=s+bytesread;
      end;
      self.Memo1.Text:=s;
      f.Free;
    end;
      

  4.   

    //将字符串和jpg写进1.tp文件
    procedure TForm1.HsBitBtn1Click(Sender: TObject);
    var
      fs,fs2 :TFileStream;
      s :string;
      len:integer;
    begin
      s := '打发上';
      fs := TFileStream.Create('1.tp',fmCreate);
      fs2 := TFileStream.Create('2.jpg',fmOpenRead);
      len :=  length(s) ;
      fs.Write(len,sizeof(integer)) ;
      fs.Write(s,len);
      len:=fs2.Size;
      fs.Write(len,sizeof(integer)) ;
      fs.CopyFrom(fs2,fs2.Size);
      fs.Free;
      fs2.Free;
    end;
    //从1.tp文件里读出字符串和jpg文件
    procedure TForm1.HsBitBtn2Click(Sender: TObject);
    var 
      fs :TFileStream;
      fs2 :TMemoryStream;
      s :string;
      len:Integer;
    begin
      fs := TFileStream.Create('1.tp',fmOpenRead );
      fs2 := TMemoryStream.Create;
      fs.Read(len,sizeof(integer));
      fs.Read(s,len)  ;
      fs.Read(len,sizeof(integer));
      fs2.CopyFrom(fs,len) ;
      fs2.SaveToFile('3.jpg');
      fs.Free;
      fs2.Free;end;
      

  5.   

    谢谢gwhdaxia ,可以了,想问下,如果1.tp保存的文件为:
         文件名1,
         图片1(jpg);
         文件名2,
         图片2(jpg);
         文件名3,
         图片3(jpg);
       ...............
    这个能不能实现?
      

  6.   


    还是一样啊,文件名1可以用array[0..50] of char 表示,就是说文件名固定好,然后把长度一存,后面就直接来图片,读的时候直接按长度把文件名读出来,然后读长度,按长度把图片读出来