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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FileMapping 
:(
    Опции темы
serious
Дата 4.4.2003, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот такой вопрос: как работать с файлами, отображенными в память? Особенно не понятно, что делать с указателем на начало области отображения файла.



--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
Song
Дата 4.4.2003, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Какой именно параметр тебе не понятен?


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
stab
Дата 4.4.2003, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Цитата
Особенно не понятно, что делать с указателем на начало области отображения файла.


работатть как с обычным указателем на данные, т.е. у тя есть указатель на отображенные данные и известно что в файле хранится Integer, тогда:

i := PInteger(DataPtr)^;

если массив Integer из 100 элементов то:

for i := 1 to 100 do begin
ShowMessage(IntToStr(PInteger(DataPtr)^));
Inc(PInteger(DataPtr));
end;

проще же сразу наложить структуру на память, т.е.:

TSomeRecord = record
Name: array[1..8] of Char;
Age: Byte;
end;

PSomeRecord = ^TSomeRecord;

var
r: PSomeRecord;

r := PSomeRecord(DataPtr);
ShowMessage(r.Name);

Самое же прикольное что у мя вышло это:

TMemoryMappedStringList = class(TStringList)
private
FFileHandle: Cardinal;
FFileMappingHandle: Cardinal;
FMappedData: PChar;
public
destructor Destroy; override;
procedure MapFromFile(FileName: String);
end;


destructor TMemoryMappedStringList.Destroy;
begin
if FFileHandle <> 0 then begin
UnmapViewOfFile(FMappedData);
CloseHandle(FFileMappingHandle);
CloseHandle(FFileHandle);
end;
inherited;
end;


procedure TMemoryMappedStringList.MapFromFile(FileName: String);
begin
FFileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if FFileHandle <> 0 then
FFileMappingHandle := CreateFileMapping(FFileHandle, nil, PAGE_READONLY, 0, 0, nil);
if FFileMappingHandle <> 0 then
FMappedData := MapViewOfFile(FFileMappingHandle, FILE_MAP_READ, 0, 0, 0);
if FMappedData <> nil then
SetText(FMappedData);
end;

работает только на чтение smile.gif

Это сообщение отредактировал(а) cully - 4.4.2003, 17:22


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
serious
Дата 4.4.2003, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как, допустим, прочитать файл как файл байт, ну т.е. первый, второй и т.д. байты вот таким макаром?


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
man2002ua
Дата 5.4.2003, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Особенно не понятно, что делать с указателем на начало области отображения файла

То же самое , что и с указателем, на mallocированную память smile.gif

Цитата
А как, допустим, прочитать файл как файл байт, ну т.е. первый, второй и т.д. байты вот таким макаром

Так же, как и при работе с mallocированной памятью, тебе же написали пример:
i := PInteger(DataPtr)^;
для байтов - PByte



--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

1. Публиковать ссылки на вскрытые компоненты

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

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




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


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

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