想要對某一文件寫一自己的标识,如在文件头上写一字符串"abc",
下次要打开该文件时,先判断一下,文件头上是不是有自己写的"abc"
如果是的话再打开该文件
var
  sSrcFile: string;
  plWr: TWriter;
  destFs: TFileStream;
  srcFs: TMemoryStream;
begin
  if not OpenDialog1.Execute then Exit;
  sSrcFile := OpenDialog1.FileName;
  srcFs := TMemoryStream.Create;
  srcFs.LoadFromFile(sSrcFile);
  destFs := TFileStream.Create('C:\11.dat', fmCreate);
  plWr := TWriter.Create(destFs, 4096);
  try
    plWr.WriteString('abc');
    plWr.FlushBuffer;
    destFs.WriteBuffer(srcFs.Memory^, srcFs.Size);
  finally
    plWr.Free;
    destFs.Free;
    srcFs.Free;
  end;
end;读取的时候:
var
  re: TReader;
  srcFs: TMemoryStream;
  destFs: TFileStream;
  temp: string;
  iPos: Integer;
begin
  if not OpenDialog1.Execute then Exit;
  srcFs := TMemoryStream.Create;
  srcFs.LoadFromFile(OpenDialog1.FileName);
  destFs := TFileStream.Create('C:\1.jpg', fmCreate);
  re := TReader.Create(srcFs, 4096);
  try
    temp := re.ReadString;
    iPos := re.Position;
    ShowMessage(temp);//是abc没错
    destFs.WriteBuffer(srcFs.Memory^, srcFs.Size - iPos);
//然后查看C:\1.jpg,查看不到图片
  finally
    re.Free;
    srcFs.Free;
    destFs.Free;
  end;
end;请问在读取的时候,是哪里出问题了,要如何解决,谢谢

解决方案 »

  1.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      ms,ms1: TMemoryStream;
      a: array[0..1] of byte;
    begin
      ms:= TMemoryStream.Create;
      ms.LoadFromFile('e:\1.dat');
      ms1:= TMemoryStream.Create;
      a[0]:=$FF;
      a[1]:=$FF;
      ms1.Write(a,sizeof(a));//写入文件头信息
      ms1.Write(ms.Memory^,ms.Size);//把文件内容附加上
      ms1.SaveToFile('e:\2.dat');
      ms1.Free;
      ms.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      ms,ms1: TMemoryStream;
      a: array[0..1] of byte;
    begin
      ms:= TMemoryStream.Create;
      ms.LoadFromFile('e:\2.dat');
      ms1:= TMemoryStream.Create;
      ms.Read(a,sizeof(a));//读取文件头信息
      //判断
      ms.Position:=sizeof(a);
      ms1.CopyFrom(ms,ms.Size-sizeof(a));//读取文件内容去除文件头部分
      ms1.SaveToFile('e:\3.dat');
      ms1.Free;
      ms.Free;
    end;
      

  2.   

    楼主你搞的太复杂了,又是TWriter又是TReader的,一个TMemoryStream就ok了写入
    var
      ms: TMemoryStream;
    begin
      ms:= TMemoryStream.Create;
      ms.LoadFromFile('c:\1.jpg');
      ms.Position := 0;
      ms.Write('abc',3);
      ms.SaveToFile('c:\1.jpg');
    end;//读取
    var
      ms: TMemoryStream;
      buff:array [0..2] of Char;
    begin
      ms:= TMemoryStream.Create;
      ms.LoadFromFile('c:\1.jpg');
      ms.Position := 0;
      ms.Read(buff,3);//buff中就是'abc'
    end;