![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
Вот такой вопрос: как работать с файлами, отображенными в память? Особенно не понятно, что делать с указателем на начало области отображения файла.
-------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Какой именно параметр тебе не понятен?
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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; работает только на чтение Это сообщение отредактировал(а) cully - 4.4.2003, 17:22 -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
А как, допустим, прочитать файл как файл байт, ну т.е. первый, второй и т.д. байты вот таким макаром?
-------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| man2002ua |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
То же самое , что и с указателем, на mallocированную память
Так же, как и при работе с mallocированной памятью, тебе же написали пример: i := PInteger(DataPtr)^; для байтов - PByte -------------------- "Нет ничего более постоянного, чем временное" |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |