Zasoby

0

Mam w zasobach programu jakiś inny programik. Moje pytanie brzmi:

Jak "wyciągnąć" z zasobów ten plik i zapisać go na dysku? hmm...

Pozdrowienia, BigLama :P
Delphi5
http://biglama.w.interia.pl

0

Odpowiedź jest w faq - dokładnie w wersji programowej.
A zresztą:

{ wydobywanie RCDATA z zasobów}
function SaveRes(ResName, DestFile: PChar; var ErrMsg: PChar):boolean;
var
BytesWritten,
ResSize: cardinal;
HFile,
HResInfo,
HRes: THandle;
PRes: pointer;
begin
ErrMsg:= '';
{wyszukanie zasobu:}
HResInfo:= FindResource(hInstance, Resname, RT_RCDATA);

if HResInfo = 0 then
begin
ErrMsg:= PChar('Nie można znależć zasobu: '+#39+Resname+#39+' .');
Result:= false;
Exit;
end;

ResSize:= SizeOfResource(hInstance, HResInfo);
{wczytanie zasobu:}
HRes:= LoadResource(hInstance, HResInfo);
{utworzenie wskaźnika na załadowany zasób:}
PRes:= LockResource(HRes);

{utworzenie nowego pliku:}
HFile:= CreateFile( PChar(DestFile),
GENERIC_READ or GENERIC_WRITE ,
FILE_SHARE_READ,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
{zapisanie zasobu plikowego:}
WriteFile(HFile, PRes, ResSize, BytesWritten, nil);

if HFile = INVALID_HANDLE_VALUE then
ErrMsg:= PChar(ErrMsg + #13#13 + 'Plik: '+#39+DestFile+#39+ #13 +
'nie został prawidłowo utworzony.');

if BytesWritten &lt&gt ResSize then
ErrMsg:= PChar(ErrMsg + #13#13 + 'Plik nie został poprawnie zapisany.');

Result:= (HFile &lt&gt INVALID_HANDLE_VALUE) and (BytesWritten = ResSize);
FreeResource(HRes);
{zamknięcie pliku:}
CloseHandle(HFile);
end;

*==============================================================================

var
F: file;
Fres: Integer;
begin
AssignFile(F, 'd:\res.txt'); * stworz plik...
Rewrite(F, 1);

Fres := FindResource(hInstance, 'RES_TXT', RT_RCDATA);

BlockWrite(F, LockResource(LoadResource(hInstance, Fres))</sup>,
SizeofResource(hinstance, Fres));

Closefile(F); // zamknij plik

;;

Żywcem wyrżnięte z programu.--, tradycyjnie pozdrawiam - Numi.

0

A nie łatwije by było tak :

var
Res : TResourceStream;
begin
Res := TResourceStream.Create(hInstance, 'xxx', RT_RCDATA);
Res.SaveToFile('C:\xxx.exe');
Res.Free;
end;

Gdzie "xxx.exe" to nazwa twojego pliku--Ozyrys Pozdrawiam {hello}
Delphi 6

0

Dzięki.

0

A nie łatwije by było tak :
&gt
&gtvar
&gt Res : TResourceStream;
&gtbegin
&gt Res := TResourceStream.Create(hInstance, 'xxx', RT_RCDATA);
&gt Res.SaveToFile('C:\xxx.exe');
&gt Res.Free;
&gt end;
&gt
&gt
&gtGdzie "xxx.exe" to nazwa twojego pliku

Łatwiej i co z tego? :-)--, tradycyjnie pozdrawiam - Numi.

0

Numi napisał:
&gtŁatwiej i co z tego? :-)

No cóż ja sobie lubie ulatwiać zycie.... :-)
--Ozyrys Pozdrawiam {hello}
Delphi 6

1 użytkowników online, w tym zalogowanych: 0, gości: 1