Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-61936
chtr
2003-11-26 15:35
2003.12.19
Вводить в DBLookUpComboBox значения


14-62220
Переяслов Григорий
2003-11-26 13:35
2003.12.19
Создание VCD из MPEG-4


1-62077
alexnmsk
2003-12-09 08:15
2003.12.19
Подгружаемый TStringGrid


3-61899
Pilot
2003-11-19 15:44
2003.12.19
Архивация таблиц


1-62044
Dimaxx
2003-12-04 01:21
2003.12.19
Блокировка скриптов для WebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский