Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.29;
Скачать: CL | DM;

Вниз

Как несколько файлов упаковать в один внешний   Найти похожие ветки 

 
GBF   (2002-04-15 15:05) [0]

так как это сделанов игрушке Quake :)

интересует как упаковать всё в один файл,а потом из моей проги эти данные (файлы) прочитать ?

Заранее всем спасибо.


 
VEG ©   (2002-04-15 15:40) [1]

Пихай файлы в ресурс, а потом распаковывай их из exe-шника. это теория. Код нуженн, или сам знаешь?


 
VEG ©   (2002-04-15 15:51) [2]

1. Пишем в блокноте RC-файл, куда прописываем все нужные нам программы и другие файлы, например: ARJ EXEFILE C:\UTIL\ARJ.EXE
2. Компилируем его в ресурс при помощи Brcc32.exe. Получаем RES-файл.
3. Далее в тексте нашей программы:

implementation
{$R *.DFM}
{$R test.res} //Это наш RES-файл
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res : TResourceStream;

begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// Записывает в текущую папку arj.exe
ExtractRes("EXEFILE", "ARJ", "ARJ.EXE");
end;


 
VEG ©   (2002-04-15 15:52) [3]

Все понятно?


 
MBo ©   (2002-04-15 16:34) [4]

вряд ли захочется иметь exe в 100 мегабайт.
удобнее всего с помощью TFileStream укладывать файлы в один, и потом читать.вот простой пример:

I am trying to take some .png files and put them in one file, which will also specify the position of
the start and end of each file in the big file

From: MBo Date: 04/14/2002 09:51PM PST
This is simple way. Look at Seek and Position for more complex work

If you need to save filenames in result file, write string:
N:=Length(Fname);
FS.Write(N,SizeOf(Integer));
FS.Write(FName[1],SizeOf(Integer));
and read
FS.Read(N,SizeOf(Integer));
SetLength(Fname,N);
FS.Read(Fname[1],N);
and then
FSSave:=tfilestream.create(fname...)



procedure TForm1.Button1Click(Sender: TObject);
var
FS,FSLoad:tfilestream;
N:integer;
begin
FS:=tfilestream.create("e:\files.dat",fmCreate);
N:=2;
FS.Write(N,SizeOf(Integer));
FSLoad:=tfilestream.create("e:\4.jpg",fmOpenRead);
N:=FSload.Size;
FS.Write(N,SizeOf(Integer));
FS.CopyFrom(FSLoad,N);
FSLoad:=tfilestream.create("e:\5.jpg",fmOpenRead);
N:=FSload.Size;
FS.Write(N,SizeOf(Integer));
FS.CopyFrom(FSLoad,N);
FSLoad.Free;
FS.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
FS,FSSave:tfilestream;
Num,N,NSize:integer;
begin
FS:=tfilestream.create("e:\files.dat",fmOpenRead);
FS.Read(Num,SizeOf(Integer));
for N:=1 to Num do begin
FSSave:=tfilestream.create("e:\file"+inttostr(N)+".jpg",fmCreate);
FS.Read(NSize,SizeOf(Integer));
FSSave.CopyFrom(FS,NSize);
FSSave.Free;
end;
FS.Free;
end;



 
VEG ©   (2002-04-15 17:05) [5]

Размер программы не указывался. Если оччень большой объем файлов, то можно использовать AttachToExe. Хоть exe-шник и будет 100мб, но в памяти будет только сама прога (200кб и более)



Страницы: 1 вся ветка

Текущий архив: 2002.04.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-94398
inko
2002-04-17 18:30
2002.04.29
Выполнение приложения в командной строке...


1-94438
Rooman
2002-04-14 09:15
2002.04.29
А законна ли экспертиза системного блока вообще?


3-94300
VAleksey
2002-04-09 07:14
2002.04.29
Резервное копирование


1-94349
Jaxtor
2002-04-15 14:53
2002.04.29
Свойство BorderIcons у формы


1-94388
Gamar
2002-04-17 16:49
2002.04.29
Как обработать OwnerDraw???