Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
30.11.2008, 16:41 | #1 | |||||||||||||||||||
Неактивный пользователь
Пол: Регистрация: 24.08.2006
Сообщений: 31
Репутация: 6
|
Отображение файла в память
Здравствуйте! Возникла следующая проблема
Код:
var VirFileName: PChar; procedure Test(FileName: string); var hFile: THandle; hFileMap: THandle; FileSize: Integer; begin hFile := FileOpen(FileName, fmOpenReadWrite); FileSize := GetFileSize(hFile, nil); hFileMap := CreateFileMapping(hFile, nil, PAGE_READWRITE, 0, FileSize, nil); VirtFileName := MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, FileSize); end; Код:
procedure ReadSwap; begin ShowMessage(StrPas(VirtFileName)); end;
ShowMessage нам выводит вообще какую-то кашу Подскажите плиз
__________________
Бог два раза в жизни дает человеку бесплатные зубы... в третий раз за них предется платить... :4: |
|||||||||||||||||||
Реклама: | круиз москва-казань-москва 2024 речной | частная гимназия на рублевке | как ставится коронка на передний зуб | нотр дам де пари москва 2024 | инн 7731399880 |
30.11.2008, 17:29 | #2 |
Re: Отображение файла в память
Dr Evil, было бы неплохо, после каждого вызова апи-функции, вызывать GetLastError() + FormatMessage() для проверки результата выполнения. так и узнаем, в чём проблема
__________________
THE TRUTH IS OUT THERE |
|
01.01.2009, 20:50 | #3 |
Пользователь
Пол: Регистрация: 23.08.2008
Адрес: Москва
Сообщений: 38
Репутация: 7
|
Re: Отображение файла в память
Код:
var VirFileName: PChar; MapName: string; procedure Test(FileName: string); var hFile: THandle; hFileMap: THandle; FileSize: Integer; begin MapName := FileName; hFile := FileOpen(FileName, fmOpenReadWrite); FileSize := GetFileSize(hFile, nil); hFileMap := CreateFileMapping(hFile, nil, PAGE_READWRITE, 0, FileSize, @MapName[1]); VirtFileName := MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, FileSize); end; |
05.02.2009, 16:49 | #4 |
Неактивный пользователь
Пол: Регистрация: 14.11.2008
Сообщений: 5
Репутация: 0
|
Re: Отображение файла в память
А можно немного по подробней
|
06.02.2009, 07:46 | #5 |
Неактивный пользователь
Регистрация: 04.05.2008
Сообщений: 5
Репутация: 1
|
Re: Отображение файла в память
А просто ShowMessage(String(VirFileName)) не пойдет?
|
24.02.2009, 13:04 | #6 |
Новичок
Пол: Регистрация: 26.08.2007
Сообщений: 10
Репутация: 1
|
Re: Отображение файла в память
Попробуй вместо hFile := FileOpen(FileName, fmOpenReadWrite); использовать CreateFile
|
27.02.2009, 12:26 | #7 |
Пользователь
Пол: Регистрация: 28.10.2008
Сообщений: 42
Репутация: 2
|
Re: Отображение файла в память
Я всегда делал через CreateFile:
Код:
type TFileMapBuffer=array[0..0] of byte; PFileMapBuffer=^TFileMapBuffer; TFileMap=object LastError:integer; Buffer:PFileMapBuffer; FileSize:integer{cardinal}; FileName:string; constructor Create; function MapFile(aFileName:string):boolean; function MapFileShared(aFileName:string):boolean; function MapFileRO(aFileName:string):boolean; procedure UnmapFile; destructor Destroy; end; {$R-} constructor TFileMap.Create; begin LastError:=0; Buffer:=nil; FileSize:=0; FileName:=''; end; function TFileMap.MapFile(aFileName:string):boolean; var hhFile,hFileMap:THandle; begin Result:=False; UnmapFile; {if we make map for another file and have already mapped smthg} hhFile:=CreateFile(PChar(aFileName),GENERIC_READ or GENERIC_WRITE, 0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if(hhFile=INVALID_HANDLE_VALUE)then begin LastError:=GetLastError; exit; end; hFileMap:=CreateFileMapping(hhFile,nil,PAGE_READWRITE,0,0,nil); if(hFileMap=0)then begin LastError:=GetLastError; CloseHandle(hhFile); exit; end; FileSize:=GetFileSize(hhFile,nil); Buffer:=MapViewOfFile(hFileMap,FILE_MAP_WRITE,0,0,0); if(Buffer=nil)then begin LastError:=GetLastError; CloseHandle(hFileMap); CloseHandle(hhFile); exit; end; FileName:=aFileName; CloseHandle(hFileMap); CloseHandle(hhFile); LastError:=GetLastError; Result:=True; end; function TFileMap.MapFileShared(aFileName:string):boolean; var hhFile,hFileMap:THandle; begin Result:=False; UnmapFile; {if we make map for another file and have already mapped smthg} hhFile:=CreateFile(PChar(aFileName),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if(hhFile=INVALID_HANDLE_VALUE)then begin LastError:=GetLastError; exit; end; hFileMap:=CreateFileMapping(hhFile,nil,PAGE_READWRITE,0,0,nil); if(hFileMap=0)then begin LastError:=GetLastError; CloseHandle(hhFile); exit; end; FileSize:=GetFileSize(hhFile,nil); Buffer:=MapViewOfFile(hFileMap,FILE_MAP_WRITE,0,0,0); if(Buffer=nil)then begin LastError:=GetLastError; CloseHandle(hFileMap); CloseHandle(hhFile); exit; end; FileName:=aFileName; CloseHandle(hFileMap); CloseHandle(hhFile); LastError:=GetLastError; Result:=True; end; function TFileMap.MapFileRO(aFileName:string):boolean; var hhFile,hFileMap:THandle; begin Result:=False; UnmapFile; {if we make map for another file and have already mapped smthg} //write('CreateFile...'); hhFile:=CreateFile(PChar(aFileName),GENERIC_READ, FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_READONLY,0); if(hhFile=INVALID_HANDLE_VALUE)then begin LastError:=GetLastError; exit; end; //writeln('ok'); //write('CreateFileMapping...'); hFileMap:=CreateFileMapping(hhFile,nil,PAGE_READONLY,0,0,nil); if(hFileMap=0)then begin LastError:=GetLastError; CloseHandle(hhFile); exit; end; //writeln('ok'); FileSize:=GetFileSize(hhFile,nil); //write('MapViewOfFile...'); Buffer:=MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0); if(Buffer=nil)then begin LastError:=GetLastError; CloseHandle(hFileMap); CloseHandle(hhFile); exit; end; //writeln('ok'); FileName:=aFileName; CloseHandle(hFileMap); CloseHandle(hhFile); LastError:=GetLastError; Result:=True; end; procedure TFileMap.UnmapFile; begin if(Buffer<>nil)and(FileName<>'')then begin UnmapViewOfFile(Buffer); LastError:=GetLastError; Buffer:=nil; FileSize:=0; FileName:=''; end; end; destructor TFileMap.Destroy; begin UnmapFile; end; |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отображение шрифтов в Nero 9.4.26.0? | Tolja | Архив | 2 | 02.12.2009 13:25 |
Отображение сетевого окружения. | lesnik66 | Скорая помощь | 9 | 23.06.2009 18:57 |
Отображение сайта. | Джамшуд | Скорая помощь | 4 | 29.03.2009 11:16 |
Почтим память Max_Boy (Игорь Кураев). Светлая память. | shashel | Windows 7 | 0 | 28.03.2009 10:08 |
Плохое отображение. | PlazmaSW | Windows XP | 6 | 27.01.2009 11:27 |
|
|