Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
ВнизНе могу прочитать файл в память. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c