Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись файлов!!! 
:(
    Опции темы
Fighter
Дата 8.1.2005, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Многие наверное играли в такие игры как Warcraft III, Diablo II, Allods и т.д. Вся инфа для игры содержится в файлах (например в mpq). Во время работы программы, она по мере необходимости добывает все что ей надо из этих файлов. Вот как самому также работать с файлами. Мне надо, чтобы можно было прямо в программе выбрать несколько файлов (ну это я смогу) и объеденить их в один выходной. Затем когда я выберу этот файл, программа должна показать мне список файлов, которые внутри этого файла и при необходимости работать с файлами которые внутри одного файла как с файлами на диске. Сжимать файлы не обязательно, лишь бы файлы запихивались бы в один файл.
PM MAIL   Вверх
Pakshin A. S.
Дата 8.1.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Че-то не пойму я смысл... Если нужно хранить разную инфу, то пользуйся TIniFile, если не хочется, чтобы юзер все это видел, то пользуйся нетипизированными файлами....
PM   Вверх
DonPager
Дата 8.1.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



смотри спецификацию на архиваторы
(документации в сети более чем достаточно)


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
Illusion Dolphin
Дата 8.1.2005, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Берёшь нетипизированый файл. В него пишешь заголовок, куда сохрани какую-ниюудь сигнатуру, дабы распознать свой файл. После этого пишешь версию файла (очень рекомендую). затем 2 варианта:
1) пишешь сигнатуту начала нового файла, имя файла, его размер, а за ним сам файл (данные). после этого следует или сигнатура конца данных либо новая сигнатура начала нового файла. (т.е. как бы цепочка)
2) либо сразу пишешь все размеры файлов и смещение, с которого они начинаются, и потом по очереди сами данные.
P.S. смотри информацию по TFileStream
сейчас пример напишу...

Это сообщение отредактировал(а) Illusion Dolphin - 8.1.2005, 13:34


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Illusion Dolphin
Дата 8.1.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Вот тебе примерчик (на форма две кнопочки):

Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
Tfheader= record
  id : string[3];
  version : byte;
  end;
  TFileRecHeader = record
  Filesize : Cardinal;
  FileExists : boolean;
  FileName : string[255];
  end;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var fr,fw : TFileStream;
h : Tfheader;
buffer : array of byte;
fh : TFileRecHeader;
fn1,fn2 : string;
begin
fn1:='C:\1.jpg';
fn2:='C:\2.jpg';
// открываем файл, куда писать будем
fw := TFileStream.Create('C:\compfile.dat',fmOpenWrite or fmCreate);
// создаём заголовок
h.version:=1;
h.id:='xxx';
 // пишем его
fw.WriteBuffer(h,sizeof(h));

 // открываем первый файл
fr:= TFileStream.Create(fn1,fmOpenRead);
 // создаём буффер
SetLength(buffer,fr.Size);
fr.ReadBuffer(Pointer(buffer)^,fr.Size);
 // создаём заголовок к файлу
fh.Filesize:=fr.Size;
fh.FileExists:=true;
fh.FileName:=ExtractFileName(fn1);
 // читаем первый файл
fw.WriteBuffer(fh,sizeof(fh));
 // записываем его
fw.WriteBuffer(Pointer(buffer)^,fr.Size);
fr.free;
 // теперь всё то же со вторый файлом
fr:= TFileStream.Create(fn2,fmOpenRead);
SetLength(buffer,fr.Size);
fr.ReadBuffer(Pointer(buffer)^,fr.Size);
fh.Filesize:=fr.Size;
fh.FileExists:=true;
fh.FileName:=ExtractFileName(fn2);
fw.WriteBuffer(fh,sizeof(fh));
fw.WriteBuffer(Pointer(buffer)^,fr.Size);
fr.free;
 // пишем "пустой" заголовок - файлы закончились
fh.Filesize:=0;
fh.FileExists:=false;
fh.FileName:='';
fw.WriteBuffer(fh,sizeof(fh));
 // закрываем файл
fw.free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var fr,fw : TFileStream;
h : Tfheader;
buffer : array of byte;
fh : TFileRecHeader;
begin
// открываем файл
fr := TFileStream.Create('C:\compfile.dat',fmOpenRead);
 // читаем заголовок
fr.ReadBuffer(h,sizeof(h));
if h.id<>'xxx' then begin fw.free; exit end; //занчит файл не наш, повреждён и т.д.;
 // смотрим версию! (это если формат файла будет меняться)
if h.version=1 then
begin
 Repeat
   // читаем инфу о сл. файле
  fr.ReadBuffer(fh,sizeof(fh));
  if not fh.FileExists then break;   // файлов больше нет
  fw:=TFileStream.Create('C:\NEW_'+fh.FileName,fmOpenWrite or fmCreate);   // создаём файл
  SetLength(buffer,fh.Filesize);   // создаём буффео
  fr.ReadBuffer(Pointer(buffer)^,fh.Filesize);   // читаем
  fw.WriteBuffer(Pointer(buffer)^,fh.Filesize);   // пишем
  fw.Free;
 until false;
end;

fr.free;
end;

end.



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
RA
Дата 8.1.2005, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Вот DonPager првильную мыслю выдал, отсебя могу добавить что юзать тебе нужно компонент ZipForge от www.componentace.com
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.