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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2010, 15:39   #11
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Если размер не критичен, я бы создал заголовок к этому файлу, и в нем вся инфа - сколько их и отступы от начала. А если критичен, читай выше про зип. Можно совместить, запаковать в зип уже в своем формате. Можно 7-Zip заюзать, длл-ку при установке закинуть туда же, куда Уткин предложил, если не хочешь чтобы она в папке с программой была.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 02.08.2010, 15:48   #12
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Lazarus с dll не очень дружит. Часто срывается в AV без видимых причин.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 02.08.2010, 15:51   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

кхм...все АПИ в длл же
главное заголовочник верный написать
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2010, 16:01   #14
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Может раз такое дело все же проще без всякой архивации свой луна-парк построить?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 02.08.2010, 16:05   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можно...никто не запрещает
контейнер простой
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2010, 16:12   #16
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Нууу... Первый пост как раз был про то, как правильно организовать контейнер для файлов.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 02.08.2010, 16:21   #17
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
палевно
Эээээ.... "палевно"? Откуда вдруг всплыло это "палевно"? Защиту пишем?

Кроме того, вам необязательно использовать программу-распаковщик с кучей функций. Достаточно взять любой вариант распаковщика в виде DLL, компонента, модуля или ещё чего.

P.S. Лично я предпочитаю использовать UnRar.dll (при прочих равных условиях).

Если не хотите архив - можно записать в файл друг за другом. А чтобы отличать границы файлов - запишите в начало файла заголовок.

Например:
Код:
function FilesToFile(const AFiles: array of String; const AFileName: String);
type
  THeader = packed record
    Signature: Cardinal;
    Count: Cardinal;
  end;
const
  Signature = { придумайте сами в 4 байта };
var
  Src, Dst: TFileStream;
  Sizes: array of Int64;
  SavedPos: Int64;
  X: Integer;
begin
  Dst := TFileStream.Create(AFileName, fmCreate or fmShareExclusive);
  try
    Header.Signature := Signature;
    Header.Count := Length(AFiles);

    Dst.WriteBuffer(Header, SizeOf(Header));

    SavedPos := Dst.Position;

    SetLength(Sizes, Length(AFiles));
    for X := 0 to High(AFiles) do
    begin
      Sizes[X] := 0;
      Dst.WriteBuffer(Sizes[X], SizeOf(Sizes[X]));
    end;

    for X := 0 to High(AFiles) do
    begin
      Src := TFileStream.Create(AFiles[X], fmOpenRead or fmShareDenyWrite);
      try
        Sizes[X] := Src.Size;
        Dst.CopyFrom(Src, Src.Size);
      finally
        FreeAndNil(Src);
      end;
    end;

    Dst.Position := SavedPos;
    for X := 0 to High(AFiles) do
      Dst.WriteBuffer(Sizes[X], SizeOf(Sizes[X]));

  finally
    FreeAndNil(Dst);
  end;
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось artemavd; 05.08.2010 в 07:47.
GunSmoker вне форума Ответить с цитированием
Старый 03.08.2010, 00:12   #18
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Можно как у меня было (просто слепить k-файлов вместе):

<можно заголовок какой-нибудь на всякий случай><размер области №0><область №0><размер области №1><область №1> . . . <размер области №k-1><область №k-1>
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 03.08.2010, 06:49   #19
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Желательно таблицу вынести в начало файла или вообще хранить отдельно. Это ускорит доступ к файлам в контейнере.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 03.08.2010, 12:39   #20
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

я когда писал свой архиватор (тоже не устраивало множество мелких файлов размером от 100 байт до 20 Кбайт) приходилось пихать их в один файл с еще дополнительным архивированием (ZLib), сразу получил файл размером меньшим в 3 раза от суммы размера всех мелких. Алгоритм формирования такого файла придумывал свой, что то типа
1. заголовок (Имя архива, дата создания и тп)
2. Таблица (длинна имени файла, Имя файла, длинна файла)
3. Данные (здесь в потоке архивация и склеивание с главным файлом).
сложного особо ничего в этом нету.
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Склеивание таблиц из разных файлов в один zenner Microsoft Office Excel 16 04.05.2011 23:11
Сборка нескольких файлов в один Gamst Помощь студентам 4 02.06.2010 20:19
Слияние двух файлов в один hen Общие вопросы C/C++ 1 07.10.2009 22:59
Собирание файлов в один polcta Общие вопросы C/C++ 0 01.10.2009 14:52
Копирование двух файлов в один JRcoker Общие вопросы Delphi 5 18.07.2008 21:37