Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Не получается прочитать файл использую динамическое выделение пам   Найти похожие ветки 

 
LinkFly_   (2005-11-29 06:03) [0]

Не получается прочитать файл через ф-ию 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 - файл не повреждён но предназначен для другого компьютера.
Почему????


 
XProger ©   (2005-11-29 06:07) [1]

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


 
Separator ©   (2005-11-29 06:11) [2]

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

ReadFile(hFile,PChar(pt)[0]


 
Separator ©   (2005-11-29 06:18) [3]

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

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;


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

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


 
MBo ©   (2005-11-29 07:31) [5]

ReadFile(hFile,PChar(pt)^


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

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


 
MBo ©   (2005-11-29 07:54) [7]

>LinkFly_   (29.11.05 07:47) [6]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.02.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
9-1125066394
! Han !
2005-08-26 18:26
2006.02.12
DirectX


4-1133257179
баклан
2005-11-29 12:39
2006.02.12
Нажатие кнопок, вводе текста и прочее...


15-1137138036
TUser
2006-01-13 10:40
2006.02.12
Новый компьютер


2-1138192080
medvedenator
2006-01-25 15:28
2006.02.12
Инсталлятор


6-1131142648
Untius
2005-11-05 01:17
2006.02.12
Отправка письма на smtp-сервер получателя