Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не получается прочитать файл использую динамическое выделение пам [D6, WinXP]


LinkFly_ ©   (2005-11-29 06:03:00) 

Не получается прочитать файл через ф-ию WinAPI ReadFile использую динамическое выделение памяти(Delphi6). Помогите пожалуйста, - а то прям чудеса какие-то! Вот эта программа успешно работает:

program Files_min;

uses
 Windows;
var pt:pointer;
   hFile:THANDLE;
   dwNBytes:DWORD;
begin
// Выделяем память
 pt:=VirtualAlloc(nil,MAX_PATH,
              MEM_COMMIT,PAGE_READWRITE);
 if pt=nil then
   MessageBox(0,'Error memory commit','Error',
   MB_OK OR MB_ICONERROR);

Открываем файл для чтения
 hFile:=CreateFile(
           'data.txt',
           GENERIC_READ,
           0,
           nil, // lpSecurityAttributes
           OPEN_EXISTING,
           0,// dwAttrAndFlags
           0//hTemplateFile
           );
 if hFile=INVALID_HANDLE_VALUE then
 begin
    MessageBox(0,'Error file opening',
               MB_OK or MB_ICONERROR);
    Exit;
 end;

 dwNBytes:=0;
 PChar(pt):='fghfhfghjfgjfjfgjfghjghjgjh'#0;

{
//читаем
 ReadFile(hFile,PChar(pt),
    10,
    dwNBytes,
    nil);
}

// pt:=pointer(cardinal(pt)+dwNBytes);
// PChar(pt):='fghfhfh'#0;
 MessageBox(0,pt,'File data',MB_OK);
 CloseHandle(hFile);
 VirtualFree(pt,MAX_PATH,MEM_DECOMMIT);
 ExitProcess(0);
end.

Если раскоментировать строчки:
{
 ReadFile(hFile,PChar(pt),
    10,
    dwNBytes,
    nil);
}
то вылезает Runtime ошибка 216 - файл не повреждён но предназначен для другого компьютера.
Почему????


LinkFly_   (2005-11-29 08:00:00) [1]

Значит и ему спасибо! :)
Тема закрыта.


MBo   (2005-11-29 07:54:00) [2]

>LinkFly_   (29.11.05 07:47) [6]

Separator тоже рабочий вариант давал с PChar(pt)[0]


LinkFly_   (2005-11-29 07:47:00) [3]

Млин мог бы и сам догадаться:(
Большое спасибо MBo!
Переменная передаётся как var, то есть передаётся её адрес, а у меня получалось что передаётся указатель на память с указателем...


MBo   (2005-11-29 07:31:00) [4]

ReadFile(hFile,PChar(pt) ^


LinkFly_   (2005-11-29 07:16:00) [5]

Спасибо за внимание, но очень хотелось бы получить всё-таки ответ на вопрос("почему???").


Separator   (2005-11-29 06:18:00) [6]

А чем такой код не устраивает:

var
   F: file;
   pt: Pointer;
   Len: Cardinal;
begin
   AssignFile(F, 'data.txt');
   Reset(F, 1);
   Len:= FileSize(F);
   pt:= GetMemory(Len + 1);
   BlockRead(F, Len);
   CloseFile(F);
   PChar(pt)[Len]:= #0
end;


Separator   (2005-11-29 06:11:00) [7]

Ну блин и изврат, но если хочешь так делать, то попробую:

ReadFile(hFile,PChar(pt) [0]


XProger   (2005-11-29 06:07:00) [8]

Чем DWORD(pt) := LocalAlloc(0, Size) не устраивает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо