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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 17:46   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Записать весь record в один файл

Я самоучка, поэтому часто не знаю элементарных вещей. Вот например, как эта:

Код:
TReco = record
 Stroka:String[20];
 Bit:TBitMap;
End;
Код:
Var
Reco:TReco;
Begin
Stroka:='bla-bla-bla';
Bit:=TBitMap.Create;
Bit.LoadFromFile('1.bmp');
Возникает вопрос, как сохранить всю запись в один файл? Кажись что-то связанное с F:File of TReco, хотя не уверен...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.10.2009, 19:17   #2
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Да можно сделать как MyFile: file of TReco. Примерно будет так:
Код:
type
TReco = record
 Stroka:String[20];
 Bit:TBitMap;
 end;

var
  Form1: TForm1;
  Reco:TReco;
  Myfile: file of TReco;
begin
{вставляем где надо следующий код}

Reco.Stroka:='bla-bla-bla';
Reco.Bit:=TBitMap.Create;
 AssignFile(Myfile, 'C:\temp\test.txt');
Reco.Bit.LoadFromFile('C:\temp\load.bmp');
Rewrite(Myfile);
 Write(Myfile,Reco);
CloseFile(MyFile);

end;
Кстати для интереса посмотри следующую тему
http://programmersforum.ru/showthread.php?t=51827
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 27.10.2009, 19:23   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Изображение весит 475 кб, в файл пишется только 20 байт.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.10.2009, 20:32   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Это называется типизированные файлы, почитай про них, попробуй на практике и можешь сразу про них забыть
Кстати битмап ты туда не засунешь никак.

Я советую использовать поток TFileStream, можно писать что угодно, и как угодно, все динамическое и все в твоих руках. Я даже концепт кода набросаю для твоего случая.
Код:
var
fs: TFileStream;

fs.Create('filename', fmCreate);
fs.write(strbuf, 20); //обычная дельфи строка не прокатит, массив из символов (однобайтных, если у тебя D2009) создай
reco.bit.WriteToStream(fs, ...);
fs.Free; //закрываем поток
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; 27.10.2009 в 20:37.
mutabor вне форума Ответить с цитированием
Старый 27.10.2009, 20:34   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Кстати битмап ты туда не засунешь никак.
Это печально...
Цитата:
TFileStream
Почитаем, почитаем, спасибо за инфу.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.10.2009, 20:38   #6
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Возможно, дело в том что в record для типа TBitmap пишется только ссылка заголовок, поэтому наверное лучше в данном случае писать в файл все по отдельности. Например, использовать потоки.
Создаем процедуру для записи в файл (брал из Дельфи World шаблон)
Код:
procedure TForm1.AddStrToFile(S: string; const FileName: string; doNextLine:
  boolean);
{Добавление строки к файлу doNextLine - перевод строки}
const
  CR = #13#10;
var
  f: TFileStream;
begin
  if FileExists(FileName) then
    f := TFileStream.Create(FileName, fmOpenWrite + fmShareDenyNone)
  else
  begin
    f := TFileStream.Create(FileName, fmCreate);
    f.Destroy;
    f := TFileStream.Create(FileName, fmOpenWrite + fmShareDenyNone);
  end;
  f.Position := f.Size;
  if doNextLine and (f.Size > 0) then
    f.Write(CR, 2);
  f.Write(pointer(s)^, length(s));
  f.Destroy;
end; {AddStrToFile}
Потом, например можно сделать так

Код:
  Reco.Bit.SaveToFile('C:\temp\test.txt');
  AddStrtoFile(Reco.Stroka,'C:\temp\test.txt',true);
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 28.10.2009, 09:23   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Изображение весит 475 кб, в файл пишется только 20 байт.
Все верно - туда ссылка лезет )
Цитата:
Кстати битмап ты туда не засунешь никак.
Глупости )
Битмап кидаем в Stream а уже его в файл. Без малой крови не обойтись, но можно. А если такое в класс обернуть так вообще потом проще будет писать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2009, 01:28   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Глупости )
Битмап кидаем в Stream а уже его в файл. Без малой крови не обойтись, но можно. А если такое в класс обернуть так вообще потом проще будет писать.
Вы ничего не путаете? В типизированный файл?
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 вне форума Ответить с цитированием
Старый 29.10.2009, 01:35   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

mutabor, Виталий говорит про поток TFileStream
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 29.10.2009 в 01:39.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка на файл из текущей папки! Сбор инфы в один файл! mephist Microsoft Office Excel 11 10.07.2009 13:51
За один ход можна вычеркнуть одно число и на его место записать строго меньше неотрицательное число. Witaliy Помощь студентам 5 25.02.2009 17:44
Как записать файл в файл программы? Хамяг Общие вопросы Delphi 2 02.11.2008 16:01
как записать record в файл Kn793 Общие вопросы Delphi 5 01.08.2008 08:10
Как развернуть проигрываемый видео файл на весь екран SeRhy Мультимедиа в Delphi 2 26.01.2008 21:43