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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> типизированные файлы, аналог append 
:(
    Опции темы
kindDevil
Дата 8.12.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



дан файл integer
как дописать в конец уже существующего файла еще че-нить? 
есть ли какой-нибудь аналог append?
PM MAIL ICQ   Вверх
Nicholas_S
Дата 8.12.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Используй процедуры Reset и BlockWrite, например:

Код

var f1: file of integer;
      f2: file;
      i: integer;
begin
  Assign(f1, 'test.dat');
  Rewrite(f1);
  for i:= 0 to 99 do write(f1, i);  {записываем мусор в типизированный файл}
  Close(f1);

  {открываем файл на запись, файл объявляем уже как нетипизированный}
  Assign(f2, 'test.dat');
  Reset(f2, Sizeof(i));      {запись будет происходить по 2 байта = размер типа Integer в Паскале}
  Seek(f2, Filesize(f2));   {идем в конец файла}
  Blockwrite(f2, i, 1);       {дописываем нужное число}
  Close(f2);
end.


Добавлено @ 17:44 
ээ... что-то с подсветкой?


--------------------
...все в мире относительно
PM   Вверх
volvo877
Дата 8.12.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Nicholas_S, вопрос был про типизированные файлы, а не про бестиповые, решение для которых ты предложил! Не надо никогда использовать процедуры, для этого НЕ предназначенные, если не хочешь потом сидеть и искать баги... В документации совершенно определенно говорится:
Цитата(TP Help)
BlockRead (procedure)
Reads one or more records into a variable.
Declaration:
procedure BlockRead(var F: File; var Buf; Count: Word [; var Result: Word]);
where:
F        untyped file variable
Buf      any variable
Count    an expression of type Word
Result   a variable of type Word
, понимаешь? Untyped, а не Typed...


kindDevil, что касается твоего вопроса: открываешь файл через Reset, переходишь в конец файла:
Код
Seek(f, FileSize(f));

и пишешь информацию (Reset открывает типизированные файлы КАК для чтения, ТАК и для записи)...
PM MAIL   Вверх
Nicholas_S
Дата 8.12.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



volvo877, никто тебе не мешает записать в нетипизированный файл те же самые данные, что и в типизированный, только делаться это будет через BlockWrite() вместо Write(), данные записываются те же самые, затем их можно читать через типизированный файл. Процедура BlockWrite() предназначена именно для того, для чего нужно, при чем тут BlockRead()? Я не предлагаю читать используя ее.
Проверь, потом выслушаю возражения. smile

Добавлено @ 18:43 
Хотя пример с Reset, безусловно, будет работать.

Это сообщение отредактировал(а) Nicholas_S - 8.12.2006, 18:42


--------------------
...все в мире относительно
PM   Вверх
kindDevil
Дата 9.12.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо =)
PM MAIL ICQ   Вверх
Zero
Дата 9.12.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Nicholas_S, а зачем ты выходишь из дома через дверь, выпрыгивай в окно.

PS: процедуры blockread(blockwrite), предназначены для работы с нетипизироваными файлами, зачем всё усложнять.
PM MAIL ICQ   Вверх
Nicholas_S
Дата 9.12.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Zero, я никогда не выхожу в дверь, я всегда выпрыгиваю в окно. Так веселее. smile 

Согласен, что переборщил с примером. Виноват.  smile 


--------------------
...все в мире относительно
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

2. Публиковать ссылки на варез

3. Оффтопить

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

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

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


 




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


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

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