想将一个文件压入另一个EXE文件中,再压入个密码
可是下面的获取密码函数不能提取出用下面的合并函数合并的文件
获取密码时弹出的对话框:
Passwordsize:4376592(没这么大哦)
True
密码错误,密码是:(没有获得密码)
********合并*********
Function AddtoFile(SourceFile,PassWord,TargetFile:String):Boolean;
Var
Target,Source:TFileStream;
MyFileSize,PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
Try
Target.Seek(0,soFromEnd);{往尾部添加资源}
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size++Sizeof(MyFileSize);{计算资源大小,并写入辅程尾部}
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
PassWordSize:=Sizeof(PassWord)+sizeof(PassWordSize);
Target.Seek(0,soFromEnd);
Target.WriteBuffer(PassWord,Sizeof(PassWord));
Target.WriteBuffer(PassWordSize,sizeof(PassWordSize));
Finally
Target.Free;
Source.Free;
End;
Except
Result:=False;
Exit;
End;
Result:=True;
End;
***********获取密码**********
Function PassFromFile(var password:string;SourceFile:string):Boolean;
Var
Source:TFileStream;
PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
Try
Source.Seek(0,soFromEnd);{定位到资源位置}
Source.Read(PassWordSize,Sizeof(PassWordSize));
showmessage('PassWordSize:'+inttostr(PassWordSize));
Source.Seek(-PassWordSize,soFromEnd);
Source.Read(PassWord,PassWordSize-Sizeof(PassWordSize));
Finally
Source.Free;
End;
Except
showmessage('false');
Result:=false;
Exit;
End;
showmessage('true');
Result:=true;
End;
可是下面的获取密码函数不能提取出用下面的合并函数合并的文件
获取密码时弹出的对话框:
Passwordsize:4376592(没这么大哦)
True
密码错误,密码是:(没有获得密码)
********合并*********
Function AddtoFile(SourceFile,PassWord,TargetFile:String):Boolean;
Var
Target,Source:TFileStream;
MyFileSize,PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
Try
Target.Seek(0,soFromEnd);{往尾部添加资源}
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size++Sizeof(MyFileSize);{计算资源大小,并写入辅程尾部}
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
PassWordSize:=Sizeof(PassWord)+sizeof(PassWordSize);
Target.Seek(0,soFromEnd);
Target.WriteBuffer(PassWord,Sizeof(PassWord));
Target.WriteBuffer(PassWordSize,sizeof(PassWordSize));
Finally
Target.Free;
Source.Free;
End;
Except
Result:=False;
Exit;
End;
Result:=True;
End;
***********获取密码**********
Function PassFromFile(var password:string;SourceFile:string):Boolean;
Var
Source:TFileStream;
PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
Try
Source.Seek(0,soFromEnd);{定位到资源位置}
Source.Read(PassWordSize,Sizeof(PassWordSize));
showmessage('PassWordSize:'+inttostr(PassWordSize));
Source.Seek(-PassWordSize,soFromEnd);
Source.Read(PassWord,PassWordSize-Sizeof(PassWordSize));
Finally
Source.Free;
End;
Except
showmessage('false');
Result:=false;
Exit;
End;
showmessage('true');
Result:=true;
End;
解决方案 »
- 如何控制ListView图标之间的距离
- 如何利用SQL语句或其他方法把23 34 34(一个字段的数据,中间有空格)分别插入新表的3个字段中?
- 一个关于 decision cube组件的问题
- 给两本Pascal的高级点书,不要讲基础知识的那种。
- 关于Edit问题,帮忙看以下。
- 如何提高运算效率?一个算法问题。欢迎大家进来看看,很适合练练手。~~~~~~~~
- 哪里有关于DBGridEh控件的使用说明下载?
- 关于dbgrid记录的背景色的问题!
- 用TFileStream写文件的过程中,异常中断(如断电),会否破坏文件内容?
- Delphi中一个异常处理的问题
- TDBLookupComboboxEh 可不可以录入其它数据?
- 我是个新手,求DELPHI中文帮助,谢了
3个函数都贴出来
Function AddtoFile(SourceFile,PassWord,TargetFile:String):Boolean;
Var
Target,Source:TFileStream;
MyFileSize,PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
Try
Target.Seek(0,soFromEnd);{往尾部添加资源}
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size++Sizeof(MyFileSize);{计算资源大小,并写入辅程尾部}
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
PassWordSize:=Sizeof(PassWord)+sizeof(PassWordSize);
Target.Seek(0,soFromEnd);
Target.WriteBuffer(PassWord,Sizeof(PassWord));
Target.WriteBuffer(PassWordSize,sizeof(PassWordSize));
Finally
Target.Free;
Source.Free;
End;
Except
Result:=False;
Exit;
End;
Result:=True;
End;
**********************
Function PassFromFile(var password:string;SourceFile:string):Boolean;
Var
Source:TFileStream;
PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
Try
Source.Seek(-sizeof(passwordsize),soFromEnd);{定位到资源位置}
Source.Read(PassWordSize,Sizeof(PassWordSize));
Source.Seek(-PassWordSize,soFromEnd);
Source.Read(PassWord,PassWordSize-Sizeof(PassWordSize));
Finally
Source.Free;
End;
Except
Result:=false;
Exit;
End;
Result:=true;
End;
********************************************
Function LoadFromFile(SourceFile,TargetFile :string):Boolean;
var
Source:TFileStream;
Target:TMemoryStream;
MyFileSize,Passsize:integer;
pass:string;
begin
try
Target:=TMemoryStream.Create;
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
try
Source.Seek(-sizeof(Passsize),soFromEnd);{定位到资源位置}
Source.Read(PassSize,Sizeof(Passsize));
Source.Seek(-sizeof(MyFileSize)-PassSize,soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
Source.Seek(-MyFileSize-PassSize-sizeof(MyFileSize),soFromEnd);//定位到资源位置
showmessage('afsdf');
Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源
Target.SaveToFile(TargetFile);//存放到文件
finally
Target.Free;
Source.Free;
end;
except
Result:=false;
Exit;
end;
Result:=true;
end;
string是从1开始下标的,SizeOf一个string总是4,要用Length来测算长度Target.WriteBuffer(PassWord[1],Length(password));
Target.WriteBuffer(PassWord[1],Length(password));
改完的代码:(望高手细看,小弟不胜感激!)
**********结构********
head:用于释放的程序
sourse:被添加的文件
sosize:被添加的文件和自身的大小
password:密码
passsize:密码和自身的大小**********合并文件*************
Function AddtoFile(SourceFile,PassWord,TargetFile:String):Boolean;
Var
Target,Source:TFileStream;
MyFileSize,PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
Try
Target.Seek(0,soFromEnd);{往尾部添加资源}
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize);{计算资源大小,并写入辅程尾部}
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
PassWordSize:=Length(PassWord)+sizeof(PassWordSize);
Target.Seek(0,soFromEnd);
SetLength(password, 100);//要先设置string 的大小
Target.WriteBuffer(PassWord[1],Length(password));
Target.WriteBuffer(PassWordSize,sizeof(PassWordSize));
Finally
Target.Free;
Source.Free;
End;
Except
Result:=False;
Exit;
End;
Result:=True;
End;
************获取密码************
Function PassFromFile(var password:string;SourceFile:string):Boolean;
Var
Source:TFileStream;
PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
Try
Source.Seek(-sizeof(passwordsize),soFromEnd);{定位到资源位置}
Source.Read(PassWordSize,Sizeof(PassWordSize));
Source.Seek(-PassWordSize,soFromEnd);
Source.Read(PassWord,PassWordSize-Sizeof(PassWordSize));
Finally
Source.Free;
End;
Except
Result:=false;
Exit;
End;
Result:=true;
End;
**********分离文件************
Function LoadFromFile(SourceFile,TargetFile :string):Boolean;
var
Source:TFileStream;
Target:TMemoryStream;
MyFileSize,Passsize:integer;
pass:string;
begin
try
Target:=TMemoryStream.Create;
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
try
Source.Seek(-sizeof(Passsize),soFromEnd);{定位到资源位置}
Source.Read(PassSize,Sizeof(Passsize));
Source.Seek(-sizeof(MyFileSize)-PassSize,soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
Source.Seek(-MyFileSize-PassSize,soFromEnd);//定位到资源位置
Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源
Target.SaveToFile(TargetFile);//存放到文件
finally
Target.Free;
Source.Free;
end;
except
Result:=false;
Exit;
end;
Result:=true;
end;
////////
这有流的详细教程及应用,...
head:用于释放的程序
sourse:被添加的文件
sosize:被添加的文件和自身的大小
password:密码
passsize:密码和自身的大小}///**********合并文件*************
Function AddtoFile(SourceFile,PassWord,TargetFile:String):Boolean;
Var
Target,Source:TFileStream;
MyFileSize,PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
Try
Target.Seek(0,soFromEnd);{往尾部添加资源}
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize);{计算资源大小,并写入辅程尾部}
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
PassWordSize:=Length(PassWord)+sizeof(PassWordSize);
Target.Seek(0,soFromEnd);
//SetLength(password, 100);//读字符串就不要设置大小了
Target.WriteBuffer(PassWord[1],Length(password));
Target.WriteBuffer(PassWordSize,sizeof(PassWordSize));
Finally
Target.Free;
Source.Free;
End;
Except
Result:=False;
Exit;
End;
Result:=True;
End;
//************获取密码************
Function PassFromFile(var password:string;SourceFile:string):Boolean;
Var
Source:TFileStream;
PassWordSize:integer;
Begin
Try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
Try
Source.Seek(-sizeof(passwordsize),soFromEnd);{定位到资源位置}
Source.Read(PassWordSize,Sizeof(PassWordSize));
Source.Seek(-PassWordSize,soFromEnd);
SetLength(password, PassWordSize-Sizeof(PassWordSize));///写字符串要先设置string 的大小
Source.Read(PassWord[1],PassWordSize-Sizeof(PassWordSize));
Finally
Source.Free;
End;
Except
Result:=false;
Exit;
End;
Result:=true;
End;
//**********分离文件************
Function LoadFromFile(SourceFile,TargetFile :string):Boolean;
var
Source:TFileStream;
Target:TMemoryStream;
MyFileSize,Passsize:integer;
pass:string;
begin
try
Target:=TMemoryStream.Create;
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
try
Source.Seek(-sizeof(Passsize),soFromEnd);{定位到资源位置}
Source.Read(PassSize,Sizeof(Passsize));
Source.Seek(-sizeof(MyFileSize)-PassSize,soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
Source.Seek(-MyFileSize-PassSize,soFromEnd);//定位到资源位置
Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源
Target.SaveToFile(TargetFile);//存放到文件
finally
Target.Free;
Source.Free;
end;
except
Result:=false;
Exit;
end;
Result:=true;
end;