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

Вниз

Не могу прочитать файл в память.   Найти похожие ветки 

 
galexis ©   (2003-12-05 16:18) [0]

Взял из хелпа пример считывания в память:
if OpenDialog1.Execute then
begin
try
iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
iFileLength := FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
Buffer := PChar(AllocMem(iFileLength + 1));
iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
FileClose(iFileHandle);

for i := 0 to iBytesRead-1 do
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Cells[1,i+1] := Buffer[i];
StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
end;
finally
FreeMem(Buffer);
end;

А он не читает. Длина файла вычисляется нормально. iBytesRead=-1 почему то. Что не так? Спасибо


 
galexis ©   (2003-12-05 16:22) [1]

Да, еще забыл. Кодировка файла DOS (ASCII)


 
Amoeba ©   (2003-12-05 16:22) [2]

А если так:
iBytesRead := FileRead(iFileHandle, Buffer[0], iFileLength);


 
Dimka Maslov ©   (2003-12-05 16:23) [3]

Buffer^


 
galexis ©   (2003-12-05 16:26) [4]

>Amoeba © Работает, спасибо. Если не трудно, объясните пожалуйста.


 
han_malign ©   (2003-12-05 16:27) [5]

^ - поможет отцу русской демократии
iBytesRead := FileRead(iFileHandle, Buffer ^, iFileLength);

З.Ы. Скажи спасибо, AllocMem - память обнуляет, а то было бы гораздо веселее...


 
Daemys ©   (2003-12-05 16:28) [6]

PChar - это указатель
var - передача адреса переменной
в твоём примере в ФилеРеад передался адрес переменной Buffer, а не адрес блока памяти, на который он ссылается


 
han_malign ©   (2003-12-05 16:28) [7]

Delphi syntax:

function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer;

C++ syntax:

extern PACKAGE int __fastcall FileRead(int Handle, void *Buffer, unsigned Count);

- разницу чуешь?


 
galexis ©   (2003-12-05 16:30) [8]

Учится, учится и учиться...
Спасибо всем!


 
Daemys ©   (2003-12-05 16:31) [9]

>Amoeba © (05.12.03 16:22) [2]
Buffer[0] в данном случае прокатит, а как быть если указатель нетипизированный?


 
han_malign ©   (2003-12-05 16:39) [10]

>Daemys © (05.12.03 16:31) [9]
PChar(Buffer)[0] :)))

>han_malign © (05.12.03 16:27) [5]
> З.Ы. Скажи спасибо, AllocMem - память обнуляет, а то было бы гораздо веселее...
- каюсь - ляпнул неподумав, а вот почему все это дело не навернулось, да еще и корректно ошибку вернуло - непонятно. Интересно где описана переменная Buffer, что FileRead не смог писать по адресу @Buffer.



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
3-61927
ksan
2003-11-28 09:31
2003.12.19
просмотр RDB$


6-62170
Avsam
2003-10-23 13:59
2003.12.19
TIdHTTP и прокси


1-62017
Mr.Nobody
2003-12-06 18:09
2003.12.19
Картинки в TRichEdit


1-62116
Nimnull
2003-12-09 12:22
2003.12.19
Выделение ячейки


6-62188
Vitalik
2003-10-23 11:26
2003.12.19
SendStream