Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2008, 09:42   #1
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
Стрелка Запись файлов в файл...

Доброе время суток. У меня возник вопрос:
Как мне сохранить в один файл(при помощи blockread,blockwrite) несколько файлов(например jpg,exe,mp3)??
В самоучителях про blockread и blockwrite очень мало сказанно...Если не сложно,то дайте ссылку на материал или дайте пожалуйста код...
prizrak1390 вне форума Ответить с цитированием
Старый 11.05.2008, 12:35   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Делаите описатели для каждого файла, ну например, на быструю руку
Код:
type
  TFile = packed record
    Name: array[0..31] of CHAR; // ну грубо, 32 символа в имени
    Size: DWORD; // размер файла
  end;
Теперь например запись
Код:
var
  f: File;
  
procedure FileNameIntoFile(FileName: String); // процедура для вставки в файл другой файл
var
  tmp: File;
  Buf: Pointer;
  Len: Integer;
  fl: TFile;  
begin
  AssignFile(tmp, FileName);
  Reset(tmp, 1);
  Len := FileSize(tmp);
  GetMem(buf, len);
  BlockRead(tmp, buf^, len, len);
  CloseFile(tmp);
  
  lstrcopy(PCHAR(FileName), fl.Name); // ф-я WinApi для копирования строки, проверьте синтаксис
  fl.Size := Len;
  BlockWrite(f, fl, SizeOf(TFile));
  BlockWrite(f, buf^, len);
  FreeMem(buf);
end;

begin
  {$I-} // про это читаем сами
  AssignFile(f, 'ИМЯ ФАЙЛА');
  ReWrite(f, 1);
  // тут вызываите FileNameIntoFile и в таком духе...
  CloseFile(f);
  {$I+}
end;
Теперь распаковка... по сути она такая же как и упаковка. Читаите TFile потом данные и данные с именем TFile.Name в новый файл пишите... и так пока файл не достигнет конца...
BOBAH13 вне форума Ответить с цитированием
Старый 11.05.2008, 12:37   #3
Cj_
Пользователь
 
Аватар для Cj_
 
Регистрация: 09.05.2008
Сообщений: 28
По умолчанию

я этим тож занимался, вот написанный мной PocketMaker, разбирайсо

function getfsize(path: string): _BY_HANDLE_FILE_INFORMATION;
var
p: string;
f: cardinal;
i: _BY_HANDLE_FILE_INFORMATION;
begin
p := path;
f := createfile(pchar(p),
GENERIC_READ, FILE_SHARE_READ,
nil, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, 0);
if f <> 0 then
begin
GetFileInformationByHandle(f, i);
result := i;
closehandle(f);
end
else
result := i;
end;

procedure Fill(var a:array of char;s:string);
var
j:cardinal;
begin
for j:=1 to length(s) do
begin
a[j-1]:=(s[j]);
end;

end;


procedure CreatePocket(s:string);
var
p,f:TFileStream;
b:byte;
cap:string;
st:array[0..255]of char;
ss:string;
c,j:cardinal;
begin
cap:=form1.caption;
p:=TFileStream.Create(s,fmCreate or fmOpenWrite);
b:=0;
p.Write(b,sizeof(b));
p.Position:=5;
for j:=0 to form1.data.Items.Count-1 do
begin
ss:=extractfilename(form1.data.Item s[j]);
b:=length(ss);
p.Write(b,sizeof(b));
c:=getfsize(form1.data.Items[j]).nFileSizeLow;
p.Write(c,sizeof(c));
fill(st,ss);
p.Write(st,length(ss));
end;
c:=p.Position-5;
p.Position:=1;
p.Write(c,sizeof(c));
p.Position:=c+5;
for j:=0 to form1.data.Items.Count-1 do
begin
form1.caption:=inttostr(j+1)+'/'+inttostr(form1.data.items.count)+ ' '+extractfilename(form1.data.Items[j]);
application.ProcessMessages;
f:=TFilestream.Create(form1.data.It ems[j],fmOpenRead);
p.CopyFrom(f,f.Size);
f.Free;
end;
отлаживание - процесс избавления программы от лажи
Cj_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в файл Titan123 Общие вопросы Delphi 6 23.08.2008 01:12
Запись в файл |{ot Общие вопросы Delphi 6 05.07.2008 02:24
Запись в файл [Smarik] Помощь студентам 4 07.05.2008 23:26
Запись в файл С++ Viteks Общие вопросы C/C++ 3 18.04.2008 13:18
запись в файл Prisian Общие вопросы Delphi 6 24.07.2007 13:43