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

Вниз

Чтение файла в буфер, для последующей работы...   Найти похожие ветки 

 
Игорь С.   (2002-07-31 15:08) [0]

Привет всем объектно-ориентированным братьям по Делфи :)
Если есть свободное время, помогите разобраться.

Вот кусок кода (взятый, кстати, из примеров дельфийского хелпа)

procedure TForm1.Button1Click(Sender: TObject);

var
iFileHandle: Integer;
iFileLength: Integer;
iBytesRead: Integer;
Buffer: PChar;
i: Integer
begin
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;
end;
end;


Так вот: ЭТА ГАДОСТЬ НЕ РАБОТАЕТ!!!!!!!!!!!


Правда, если написать нечто вроде:

procedure TForm1.Button1Click(Sender: TObject);
var
FH: Integer;
i: Integer;
Buf: array [0..500] of char;
begin
if OpenDialog1.Execute then
begin
try
FH := FileOpen(OpenDialog1.FileName, fmOpenRead);
FileRead(FH, Buf, SizeOf(Buf));

for i := 0 to 500 do
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Cells[0,i+1] := IntToHex(i, 8);
StringGrid1.Cells[1,i+1] := Buf[i];
StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buf[i]));
StringGrid1.Cells[3,i+1] := IntToHex(Integer(Buf[i]), 2);
end;
finally
FileClose(FH);
end;
end;
end;


Тут все работает прекрасно. Но это ж, пардон, через ж@пу! Хочется, что бы все было
изящно (ессно, меня интересует открытие файла, а не представление его в стринг-гриде).

Трехдневные долбания мои и моего коллеги привели к тому, что я окончательно
запутался: сначала грешил на выделение памяти, теперь думаю на FileRead, хотя
в других моих прогах, эти процедуры и функции работают нормально...

В общем, кто знает этот вопрос глубоко (и у кого есть время) помогите пожалуйста
одолеть этого злобного и коварного врага!
Заранее благодарен. (konung_i@rambler.ru - если захотите мне написать)


 
Skier ©   (2002-07-31 15:14) [1]

>Игорь С.


> ессно, меня интересует открытие файла, а не представление
> его в стринг-гриде


А почему бы тебе не использовать TFileStream ?


 
SVM   (2002-07-31 15:22) [2]

Видимо, надо так:
iBytesRead = FileRead(iFileHandle, Buffer^, iFileLength);


 
Fast   (2002-07-31 15:25) [3]

А разве не удобней работать с AssignFile, BlockRead вместо апишных OpenFile?



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

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

Наверх




Память: 0.47 MB
Время: 0.024 c
3-35142
Loco
2002-07-21 16:02
2002.08.12
SQL


1-35352
ilg
2002-07-30 13:25
2002.08.12
OnClick для компонента


1-35317
SemFLY
2002-07-24 01:17
2002.08.12
Заполнение текстового документа из программы...


7-35488
Timon
2002-05-27 14:40
2002.08.12
---|Ветка была без названия|---


8-35383
QueenOfRain
2002-04-04 10:41
2002.08.12
Как сделать невидимую форму?