Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

file mapping


race1 ©   (2004-08-03 06:41:00) 

после замапивания файла в процесс у нас появился указатель где лежат данные файла. как можно пройтись по этим данным по-байтно, т.е. узнать 1-ый быйт, 2-ой байт и т.д.?


race1   (2004-08-03 10:44:00) [1]

прикручу у себя работу с замапленными файлами как с массивами. это моя мечта была когда я делал как в [6] :)


ЮрийК   (2004-08-03 10:40:00) [2]

Примерно так:

TByteArray = array [0..MaxInt div SizeOf(Byte) - 1] of Byte;
PByteArray = ^TByteArray;

PMapedFile : PByteArray;
PMapedFile := MapFile(...);//обёртка функций, которые маппируют файл

PMapedFile[n-1] - n-ный байт в файле

Вместо байта может быть и Word и Integer и т.д.


Игорь Шевченко   (2004-08-03 10:38:00) [3]

Можно и PByteArray(Указатель)^[номер_байта]


Игорь Шевченко   (2004-08-03 10:37:00) [4]


> так?


В принципе, можно и так.

FileMapping дает возможность работать с данными файла, как если бы файл целиком был загружен в память.


race1   (2004-08-03 10:29:00) [5]

PChar(Указатель)^ - первый байт


pchar(cardinal(указатель) + n)^;  // n-ый байт


так?


Игорь Шевченко   (2004-08-03 09:55:00) [6]


> после замапивания файла в процесс у нас появился указатель
> где лежат данные файла. как можно пройтись по этим данным
> по-байтно, т.е. узнать 1-ый быйт, 2-ой байт и т.д.?


PChar(Указатель)^ - первый байт

Точно так же, как обычная работа с памятью.

> думал так удобнее с ними работать и быстрее.


Правильно думал


race1   (2004-08-03 09:20:00) [7]

в целях удобства я и решил использовать отображённые в память файлы. думал так удобнее с ними работать и быстрее. нифига, блин, только время потратил :(


MegaVolt   (2004-08-03 09:15:00) [8]

Только читать по байту будет медленно читай по 32К а уж потом лазь по буферу.


oleg_SYS   (2004-08-03 09:05:00) [9]

Юзай TFileStream:

...
var
fs : TFileStream;
b : Byte;
begin
fs := TFileStream.Create('путь к файлу', fmOpenRead);
fs.Position := 5; // указываешь какой байт те нужен
fs.Read(b,1); // загружаешь этот байт
fs.Free;

Можно в цикле. Тогда каждый раз Position не нада менять.


race1   (2004-08-03 09:03:00) [10]

а?


Наверх

Титульная страница Поиск, карта сайта Написать письмо