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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2008, 10:08   #1
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
Смущение Создать свой формат файла

Подскажите, можно ли средствами Delphi создать свой собственный формат файла, если можно - то как?
Заранее спасибо.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 24.08.2008, 10:45   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Денис, формат файла - это условность (вопрос соглашений).
Используйте потоки для сохранения Ваших данных. Созданный файл будет в собственном формате. Как правило есть заголовок файла с информацией о типе, версии, датах и т.д. Дальше в файле идут данные. Как они будут записаны это Ваше дело. Посмотрите самое простое - формат dbf-файла.

Или вот, для примера - сохранение объектов в поток:

Код:
type
   TMyObject = class
   private
      field1 : integer;
      field2 : string;
   public
      constructor Create;
      procedure Save(F:TStream);
      procedure Read(F:TStream);
   end;

constructor TMyObject.Create;
begin
   inherited Create;
   field1 := 100;
   field2 := 'test';
end;

procedure TMyObject.Save(F:TStream);
var L:integer;
begin
   F.Write(field1, sizeOf(integer));
   L := length(field2);
   F.Write(L, sizeOf(integer));
   if L > 0 then F.Write(field2[1], L);
end;

procedure TMyObject.Read(F:TStream);
var L:integer;
begin
   F.Read(field1, sizeOf(integer));
   F.Read(L, sizeOf(integer));
   if L = 0 then field2 := ''
   else begin
      SetLength(field2, L);
      F.Read(field2[1], L);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var T1 : TMyObject;
    F:TFileStream;
begin
   T1 := TMyObject.Create;

   F := TFileStream.Create('test.dat', fmCreate);
   try
      T1.Save(F);
   finally
      F.free;
   end;

   F := TFileStream.Create('test.dat', fmOpenRead);
   try
      T1.Read(F);
   finally
      F.free;
   end;
end;
alexBlack вне форума Ответить с цитированием
Старый 24.08.2008, 10:53   #3
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

С этим ясно..Вот например можно написать так?
Код:
FileStream := TFileStream.Create;
...
FileStream.SaveToFile('Test.tst');
такого формата же нет, тоесть можно разные окончания приписывать?
Манжосов Денис :) вне форума Ответить с цитированием
Старый 24.08.2008, 11:01   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Конечно можно.НО если этот формат не зарегистрирован в системе его никакой программой не откроешь.Открыть его можно только из твоей программы если есть возможность открывать файл.А если формат Зарегистрировать то при открытии файла будет запускаться прога которая указана в регистрации
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 24.08.2008, 11:28   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

2 Манжосов Денис: Определитесь что такое вообще "формат файла"! Это не имя файла ( его окончание ) это просто "правила" по которым надо читать из файла теже байты ( биты если углубляться, но это не важно ). Вот и все. А то какое там расширение, это уже условность самой системы.
BOBAH13 вне форума Ответить с цитированием
Старый 24.08.2008, 14:09   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Совершенно верно, а обозвать .tst можно и обычный текстовый файл. Вообще любому файлу можно присвоить любое расширение, и это никак не повлияет на формат данных в нем. Нормальные программы читают заголовки и не обращают внимание на расширения (или обращают и спрашивают у пользователя как поступить), переименуй .mp3 файл в .tst и запусти с помощью какого нибудь плеера, WinAMP или др., увидишь что будет.
Кстати файлы могут быть вовсе без расширения.
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; 24.08.2008 в 14:12.
mutabor вне форума Ответить с цитированием
Старый 24.08.2008, 17:14   #7
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Просто расширение не как не влияет на структуру файла, это просто пояснение системе, например чтобы проверить ассациацию. А вот структура - это другой разговор.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 24.08.2008, 17:48   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Может хватит флудить ? Такие умные "без повторения" ответы... извиняюсь за собственный флуд
BOBAH13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать и вставить в макрос свой BOX ЕщеОдинСергей Microsoft Office Excel 8 28.04.2009 20:49
Как создать свой компонент? Д'якон Компоненты Delphi 1 21.05.2008 16:37
Помогите создать свой почтовый сервер Админ в каске Свободное общение 0 31.03.2008 13:19
Свой шифрованый формат на Builder 6 Руслантус C++ Builder 2 25.03.2008 12:34
Как создать свой формат? Rahim1993 Общие вопросы Delphi 2 04.03.2008 17:04