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

Вниз

Файлы файлы файлы!!   Найти похожие ветки 

 
John Doe ©   (2004-03-13 20:39) [0]

Здрасте!! Мне необходимо прочитать файл и записать его побайтно в массив.Я использую Example(пример) из делфовского help"а.
Всегда выдается ошибка, а чтение происходит не всегда(или
не со всеми файлами), почему??
Как считать данные из "Buffer" (если они туда вообще заносятся)??
И почему если аттрибут "fmOpenRead" в функции "FileOpen" заменить на "faReadOnly", то файл вообще не читается!!

Помогите кто может!!

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;

Заранее благодарен!!


 
Defunct ©   (2004-03-13 20:48) [1]

procedure TForm1.Button1Click(Sender: TObject);
Var FileStream: TFileStream;
begin
 Try
   FileStream := TFileStream.Create("c:\100.jpg",fmOpenRead);
   FileStream.Position := 0;
   // В FileStream прочитанный файл, осталось только перекопировать в массив
 Finally
   FileStream.Free;
 End;
end;


 
Dimaxx ©   (2004-03-14 01:57) [2]

2 Defunct: После создания потока нет необходимости ставить указатель в ноль - метод create автоматически это делает.


 
default ©   (2004-03-14 02:10) [3]

Defunct ©   (13.03.04 20:48) [1]
или в TMemoryStream загружать(сразу и массив готов!)


 
Fay ©   (2004-03-14 02:52) [4]

Попробуй так

procedure  Jopa(fn : String);
var
 Buf : PChar;
 h : THandle;
 sz, n : Cardinal;
begin
 h := CreateFile(PChar(fn), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
 if h = INVALID_HANDLE_VALUE then
   begin
     case GetLastError of
       .... blablalbla..
     end;
     Exit;
   end;
 sz := GetFileSize(h, nil);
 GetMem(Buf, sz);
 ReadFile(h, Buf^, sz, n, nil);
 for sz := 0 to n do
   begin
     StringGrid1.RowCount := StringGrid1.RowCount + 1;
     StringGrid1.Cells[1,i+1] := Buf[i];
     StringGrid1.Cells[2,i+1] := Char(Byte(Buf[i])+$30);
   end;
 FreeMem(Fuf);
 CloseHandle(h);
end;


 
John Doe   (2004-03-14 23:57) [5]

Всем спасибо за помощь!! Работает!! Особенно JOPA!!


 
Fay ©   (2004-03-15 00:19) [6]

Ваще-то Char(Byte(Buf[i])+$30) не совсем то, что хотел автор вопроса. 8) Я просто слишком долго не спал 8))
И  StringGrid1.RowCount надо бы вынести из цикла, типа:
StringGrid1.RowCount := StringGrid1.RowCount + n;
for ....


 
John Doe   (2004-03-15 21:15) [7]

2Fay
StringGrid мне не нужен!! Все что мне было нужно я подделал под себя и все нормально работает!! Благодарствую!! :)



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

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

Наверх




Память: 0.48 MB
Время: 0.032 c
1-1079371283
$tranger
2004-03-15 20:21
2004.04.04
Защита программы


14-1078596392
Thor
2004-03-06 21:06
2004.04.04
Демка СТАЛКЕРа


11-1057585718
Boguslaw
2003-07-07 17:48
2004.04.04
Visual Database objects


14-1079023566
ИМХО
2004-03-11 19:46
2004.04.04
"I/O error 998"


1-1078996913
Дас Виндовс 45
2004-03-11 12:21
2004.04.04
Сортировка массива