Текущий архив: 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.46 MB
Время: 0.04 c