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


Автор: ne0n 12.5.2006, 18:15
Записываю я в файл некие данные. Порывшись в DRKB узнал про Size, которая возрашает кол-во байт в файле. Вобщем либо я туплю либо еще что-то, но не как не могу вкурить, как ей воспользоваться. Подскажите. Плиз .  

Автор: drkot 12.5.2006, 18:18
В типизированых файлах Size возвращает не количество байт, а количество структур (записей) 

Автор: ne0n 12.5.2006, 18:20
Цитата(drkot @  12.5.2006,  18:18 Найти цитируемый пост)
В типизированых файлах Size возвращает не количество байт, а количество структур (записей) 

Ну в смысле я и это хотел сказать, маленько попутал.
 

Автор: drkot 12.5.2006, 18:29
домножай полученое значение на размер записи и будет  smile 
кста seek работает точно также. 

Автор: ne0n 12.5.2006, 18:32
Цитата(drkot @  12.5.2006,  18:29 Найти цитируемый пост)
домножай полученое значение на размер записи и будет  smile 

Всмысле? Примерчик моно?

Seek он переходит на заданное кол-во.
 

Автор: Poseidon 12.5.2006, 18:42
Пользуйся лучше потоками и все будет чики smile

Код

var Stream: TMemoryStream;
begin
Stream:= TMemoryStream.Create;
try
Stream.LoadFromFile('youfile.lol');
ShowMessage(IntToStr(Stream.Size))
finally Stream.Free; end;
end;
 

Автор: drkot 12.5.2006, 18:45
Цитата(ne0n @  12.5.2006,  18:32 Найти цитируемый пост)
Seek он переходит на заданное кол-во.

да именно так в заданую позицию.

пример ищи с хелпе. помоему такм все понятно. 

Автор: Yanis 12.5.2006, 23:14
ne0n, drkot
Коллеги, что за функция Size? Такой функции в языке Delphi я не знаю, но я знаю функцию GetFileSize, которая используется в Delphi для определения размеров файлов. 

Автор: Nickel 13.5.2006, 12:05
Видимо имелась ввиду функция FileSize, но я бы тоже, например, предпочёл GetFileSize. 

Автор: Guedda 13.5.2006, 13:28
Еще есть для структур SizeOf 

Автор: ne0n 13.5.2006, 13:54
Цитата(Yanis @  12.5.2006,  23:14 Найти цитируемый пост)
ne0n, drkot
Коллеги, что за функция Size? Такой функции в языке Delphi я не знаю, но я знаю функцию GetFileSize, которая используется в Delphi для определения размеров файлов.  


Она есть (во всяком случии DRKB так написано):

Цитата

Теперь функции работы с файлом: 

read(f,b); - прочитать 1 байт 
write(f,b); - записать 1 байт 
seek(f,100); - поставить текущее положение считывания/записи на сотый байт 
Size(f); - прочитать количество байт в файле. 
Eof(f); - узнать не являетсмя ли байт последним 

Все эти функции не работают с файлами большими 2 Gb. 


Цитата(Guedda @  13.5.2006,  13:28 Найти цитируемый пост)
Еще есть для структур SizeOf  


поподробней... 

Автор: Guedda 13.5.2006, 16:04
Получает размер в байтах структуры...
Допустим
Код

type
  Trec = record
    Mama : Byte;
    Papa : Byte;
  end;

//...

begin
  SizeOf(TRec);
end;

Вернет число 2 (два байта).

А вообще... Что именно нужно? Подробнее... Может мы тебя не так понимаем... 

Автор: ne0n 14.5.2006, 21:13
Цитата(Guedda @  13.5.2006,  16:04 Найти цитируемый пост)
А вообще... Что именно нужно? Подробнее... Может мы тебя не так понимаем... 


Ок. попытаюсь объяснить:

Есть файл. В него постоянно дописываюся значения. А точнее записывается целая структура типа
которой привел Guedda. При работе с такими файлами  чтобы дописать значение в конец нужно сначало при помощи Seek перейти на последний байт(а в моем случие на последнию структуру) и потом уже писать,  иначе произойдет перезапись первых байтов(структур).

Вроде усе smile 

Автор: Yanis 14.5.2006, 21:24
Цитата(Nickel @  13.5.2006,  13:05 Найти цитируемый пост)
Видимо имелась ввиду функция FileSize, но я бы тоже, например, предпочёл GetFileSize.

К сведению FileSize в своей работе и использует функцию Windows API GetFileSize.

Цитата(ne0n @  13.5.2006,  14:54 Найти цитируемый пост)
Она есть (во всяком случии DRKB так написано):
Судя по всему бональная ошибка smile


Цитата(ne0n @  14.5.2006,  22:13 Найти цитируемый пост)
Есть файл. В него постоянно дописываюся значения. А точнее записывается целая структура типа
которой привел Guedda. При работе с такими файлами  чтобы дописать значение в конец нужно сначало при помощи Seek перейти на последний байт(а в моем случие на последнию структуру) и потом уже писать,  иначе произойдет перезапись первых байтов(структур).
Ну так и переходи с помощью Seek в конец файла, в чём загвоздка? Примерно так:
Код
Seek(FileSize(f));
  

Автор: ne0n 14.5.2006, 21:38
Цитата(Yanis @  14.5.2006,  21:24 Найти цитируемый пост)
Ну так и переходи с помощью Seek в конец файла, в чём загвоздка? 


Енто конечно хорошо, но мне еще надо знать кол-во структур в файле.
 

Автор: Yanis 14.5.2006, 21:47
Цитата(ne0n @  14.5.2006,  22:38 Найти цитируемый пост)
Енто конечно хорошо, но мне еще надо знать кол-во структур в файле.

Прикидываешься или стебаешься? 

Автор: ne0n 14.5.2006, 22:11
Цитата(Yanis @  14.5.2006,  21:47 Найти цитируемый пост)
Прикидываешься или стебаешься?  

Ладно проехали smile Всем спасибо!!!




 

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