Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Вниз

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


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кб и более)




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.043 c
1-94503           AlexP                 2002-04-16 20:05  2002.04.29  
Спрятать property


4-94611           Velocity              2002-02-23 09:09  2002.04.29  
CheckBox на WinAPI


1-94361           ALM                   2002-04-17 12:51  2002.04.29  
Странное дело, однако...


1-94475           eSKey                 2002-04-15 17:39  2002.04.29  
И еще раз о хранении пароля


1-94443           Voldemar              2002-04-14 23:11  2002.04.29  
Проблема с TreeView