![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]а?