我在往一个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;
可是总读不出来,请教一下各位,这个到底是哪个函数错了,还是都错了,怎么改?谢谢了,在线等候....
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;
可是总读不出来,请教一下各位,这个到底是哪个函数错了,还是都错了,怎么改?谢谢了,在线等候....
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;
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;