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