Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Работа с файлами.


Автор: HAS 17.6.2007, 19:16
Здравствуйте.
Есть запись. Есть файл, типа этой записи.
Нужно сделать так : в первых байтах файла записать количество записей, которые записываем, а дальше сами записи.
Помогите плз.

Автор: skyboy 17.6.2007, 22:16
есть такая вещь: типизированные файлы. Ты, видимо, их и используешь. Они позволяют писать в себя только компоненты одного типа. Значит в них отдельно от записей количество не запишешь.
однако можно "обмануть", если сначала объявить файл как file of integer, а потом - как file of TYourRecord. 
Вроде такого:
Код

program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
type
  TSome = record
   val0: integer;
   val1: real;
  end;
const
   PATH_TO = 'c:\temp.txt';
var
  f1: file of integer;
  f2: file of TSome;
  i,N: integer;
  Some: TSome;
begin
 Randomize();
 {Çàïèñûâàåì ôàéë}
 N:= 5;
 AssignFile(f1,PATH_TO);
 Rewrite(f1);
 write(f1,N);
 CloseFile(f1);
 AssignFile(f2,PATH_TO);
 Reset(f2);
 for i:=1 to N do
  begin
   Some.val0:= N + 1;
   Some.val1:= N / 10;
   write(f2,Some);
  end;
 CloseFile(f2);
end;

Один минум - записать-запишем, а вот прочитать таким же способом не сможем. Ибо если мы такой "перемешанный" файл представим как file of integer и прочитаем количество как integer - все будет нормально.
Но при представлении файла как file of TYourRecord мы не сможем перейти ровно к первой записи - либо(если мы ничего не предпримем) мы будем считать integer в начале файла частью первой записи и, естественно, никакую из записей мы корректно не прочитаем из-за сдвига. Да и сдвинуть позицию чтения мы не сможем: seek для типизированных файлов перемещает указатель не на количество байт, а на количество компонент. 
--------
вариант 2: использовать нетипизированные файлы(тип file). Все проще и прозрачнее тогда получается smile 

Автор: HAS 17.6.2007, 22:39
мне и нужен нетипизированый файл.

Автор: skyboy 17.6.2007, 22:47
и? импользуй. те же самые функции assignFile, rewrite/reset, read/write, closeFile.

Автор: gambit 25.6.2007, 21:18
А зачем записывать кол-во записей????
Когда я делал записную книжку, я в цикле просто доходил до конца файла и получал число записей.

Добавлено через 4 минуты и 21 секунду
Цитата

Есть файл, типа этой записи


Цитата

мне и нужен нетипизированый файл.


 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)