![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается прочитать файл использую динамическое выделение пам [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) не устраивает?