Форум: "Основная";
Поиск по всему сайту: 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.72 MB
Время: 0.025 c
14-94566          Tosov                 2002-03-23 18:31  2002.04.29  
Помогите ссылками


1-94393           AlexanderV            2002-04-17 15:09  2002.04.29  
Определение типа драйва


1-94510           petyun                2002-04-15 14:12  2002.04.29  
HexToBin


1-94381           Каспер                2002-04-17 09:19  2002.04.29  
TReeView мигание!


3-94283           weak                  2002-04-08 14:54  2002.04.29  
MS SQL Database1.Params