Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.031 c
2-1138190213
Scavenger
2006-01-25 14:56
2006.02.12
Панель задач.


15-1137904711
AllinBDA
2006-01-22 07:38
2006.02.12
Компоненты или заголовки для Фиксального Регистра. "Феликс 3СК"


3-1134659444
mpokemonov
2005-12-15 18:10
2006.02.12
Большие буквы в запросе


5-1124276865
Andrushk
2005-08-17 15:07
2006.02.12
Сохранение поля типа TObjectList


8-1124787503
murz
2005-08-23 12:58
2006.02.12
Lame_enc.dll в Delphi 7.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский