Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра 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;
Цитата:
Содержимое файла
[test]
a=
b=

ShowMessage нам выводит вообще какую-то кашу

Подскажите плиз
__________________
Бог два раза в жизни дает человеку бесплатные зубы... в третий раз за них предется платить... :4:
Dr Evil вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: круиз москва-казань-москва 2024 речнойчастная гимназия на рублевкекак ставится коронка на передний зубнотр дам де пари москва 2024инн 7731399880


Старый 30.11.2008, 17:29   #2
pluton
ViP
 
Аватар для pluton
 
Пол:Мужской
Регистрация: 23.02.2007
Сообщений: 1,027
Репутация: 560
По умолчанию Re: Отображение файла в память

Dr Evil, было бы неплохо, после каждого вызова апи-функции, вызывать GetLastError() + FormatMessage() для проверки результата выполнения. так и узнаем, в чём проблема
__________________
THE TRUTH IS OUT THERE
pluton вне форума
 
Ответить с цитированием Вверх
Старый 01.01.2009, 20:50   #3
Steve Bloom
Пользователь
 
Пол:Мужской
Регистрация: 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;
Steve Bloom вне форума
 
Ответить с цитированием Вверх
Старый 05.02.2009, 16:49   #4
IvanVerenich
Неактивный пользователь
 
Пол:Мужской
Регистрация: 14.11.2008
Сообщений: 5
Репутация: 0
По умолчанию Re: Отображение файла в память

А можно немного по подробней
IvanVerenich вне форума
 
Ответить с цитированием Вверх
Старый 06.02.2009, 07:46   #5
Dmitry_Ukr
Неактивный пользователь
 
Регистрация: 04.05.2008
Сообщений: 5
Репутация: 1
По умолчанию Re: Отображение файла в память

А просто ShowMessage(String(VirFileName)) не пойдет?
Dmitry_Ukr вне форума
 
Ответить с цитированием Вверх
Старый 24.02.2009, 13:04   #6
nabludatel22
Новичок
 
Пол:Мужской
Регистрация: 26.08.2007
Сообщений: 10
Репутация: 1
По умолчанию Re: Отображение файла в память

Попробуй вместо hFile := FileOpen(FileName, fmOpenReadWrite); использовать CreateFile
nabludatel22 вне форума
 
Ответить с цитированием Вверх
Старый 27.02.2009, 12:26   #7
nanomyte
Пользователь
 
Пол:Мужской
Регистрация: 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;
nanomyte вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отображение шрифтов в 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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 20:41. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.15917 секунды с 11 запросами