我在往一个EXE尾部加一个字符串,这是加入函数
Function   Cjt_AddStringtoFile(SourceFile,TargetFile:string):Boolean;
  var
  TStrings:TStringStream;
  Target:TFileStream;
  Source:TStringStream;
  MyFileSize:integer;
  begin
  try
  TStrings:=TStringStream.Create('');
  Source:= TStringStream.Create(trim(SourceFile));//TFileStream.Create(SourceFile,fmOpenRead   or   fmShareExclusive);
  Target:= TFileStream.Create(TargetFile,fmOpenWrite   or   fmShareExclusive);
  try  Target.Seek(-MyFileSize,soFromEnd);//往尾部添加资源
  TStrings.CopyFrom(Source,Source.Size);
  MyFileSize:=Source.Size;//+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部
  //showmessage(TStrings.DataString);
  //Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
  Target.WriteBuffer(TStrings,MyFileSize);
  finally
  Target.Free;
  Source.Free;
  TStrings.Free;
  end;
  except
  Result:=False;
  Exit;
  end;
  Result:=True;
end;读出的函数Function   Cjt_LoadStringFromFile(SourceString,SourceFile:string):String;
 var
 // Stt:Tstream;
  S:TStringStream;
  Source:TFileStream;
  Target:TMemoryStream;
  MyFileSize:integer;
  TargetFile:string;
  begin
  try  s:=TStringStream.Create('');
//  stt:=Tstream.Create;
  Target:=TMemoryStream.Create;
  Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
  try
  MyfileSize := length(SourceString);
//  Source.Seek(-sizeof(MyFileSize),soFromEnd);
//  Source.Seek(-MyFileSize,soFromEnd);
//  Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
  Source.Seek(-MyFileSize,soFromEnd);//定位到资源位置
  Target.CopyFrom(Source,MyfileSize);//-sizeof(MyFileSize));//取出资源
  Target.SaveToStream(s);//   .SaveToFile(TargetFile);//存放到文件
  //s.CopyFrom(Stt,Stt.Size);
  TargetFile := s.DataString;
  //showmessage(inttostr(length(Targetfile)));
  finally
  s.Free;
//  stt.Free;
  Target.Free;
  Source.Free;
  end;
  except
  Result:=TargetFile;
  Exit;
  end;
  Result:=TargetFile;
end;
可是总读不出来,请教一下各位,这个到底是哪个函数错了,还是都错了,怎么改?谢谢了,在线等候....

解决方案 »

  1.   


    Function   Cjt_AddStringtoFile(SourceFile,TargetFile:string):Boolean;
    var
      TStrings:TStringStream;
      Target:TFileStream;
      Source:TStringStream;
      MyFileSize:integer;
    begin
      try
        TStrings:=TStringStream.Create('');
        Source:= TStringStream.Create(trim(SourceFile));//TFileStream.Create(SourceFile,fmOpenRead   or   fmShareExclusive);
        Target:= TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
        try
          // MyFileSize没有初始化!!!
          Target.Seek(-MyFileSize,soFromEnd);//往尾部添加资源
          TStrings.CopyFrom(Source,Source.Size);
          MyFileSize:=Source.Size;//+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部
          //showmessage(TStrings.DataString);
          //Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
          Target.WriteBuffer(TStrings,MyFileSize);
        finally
          Target.Free;
          Source.Free;
          TStrings.Free;
        end;
      except
        Result:=False;
        Exit;
      end;
      Result:=True;
    end;
      

  2.   

    function Cjt_AddStringtoFile(SourceFile, TargetFile: string): Boolean;
    var
      Target: TFileStream;
      Source: TStringStream;
      MyFileSize: integer;
    begin
      try
        Source := TStringStream.Create(trim(SourceFile)); //TFileStream.Create(SourceFile,fmOpenRead   or   fmShareExclusive);
        Target := TFileStream.Create(TargetFile, fmOpenWrite or fmShareExclusive);
        try
          MyFileSize := Source.Size; //计算资源大小,并写入辅程尾部
          Target.Seek(0, soFromEnd);
          Target.CopyFrom(Source, 0);//把资源写入辅程尾部
          Target.WriteBuffer(MyFileSize, SizeOf(MyFileSize));//记录资源的大小
        finally
          Target.Free;
          Source.Free;
        end;
      except
        Result := False;
        Exit;
      end;
      Result := True;
    end;
    //读出的函数  SourceString这个参数我还没有看懂,感觉不应该有function Cjt_LoadStringFromFile(SourceString, SourceFile: string): string;
    var
      Source: TFileStream;
      MyFileSize: integer;
    begin
      try
        Source := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyNone);
        try
          Source.Seek(-SizeOf(Integer), soFromEnd);//移动指针,准备读出资源的大小
          Source.Read(MyfileSize, SizeOf(Integer));//读出资源的大小-->MyfileSize
          Source.Seek(-(MyfileSize + SizeOf(Integer)),
            soFromEnd);//移动指针到资源的开始位置
          SetLength(Result, MyFileSize);
          Source.Read(Result[1], MyFileSize);
        finally
          Source.Free;
        end;
      except
        Result := '';
        Exit;
      end;
    end;