Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2007, 02:13   #1
ZeroCool.
Новичок
Джуниор
 
Регистрация: 02.11.2007
Сообщений: 2
Восклицание Чтение фрагмента файла в динамический массив.

Задача прочитать фрагмент файла произвольной длинны для дальнейшей обработки. Т.к. длинна кусочка может быть условно любой нужна соответственно и буферная переменная выбранной длинны.

Делаю так:

Код:

procedure SomeProc(PieceLength: integer);
var
  Piece: array of byte;
  srcFile, Result: integer;

begin
  SetLength(Piece, PieceLength);

  //

  srcFile:= FileOpen('c:\sample', fmOpenRead);

  Result:= FileRead(srcFile, Piece, PieceLength);

  FileClose(srcFile);

  //

  ShowMessage(inttostr(Result));

end;
Писал по памяти могут быть несущественные расхождения.

В Итоге переменная Result = -1, что означает что чтение провалилось.

Интересует почему и как можно эту задачу выполнить другим путем...

Последний раз редактировалось ZeroCool.; 02.11.2007 в 02:16.
ZeroCool. вне форума Ответить с цитированием
Старый 02.11.2007, 07:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Например так:


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var   t:TFileStream; st:array of byte;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var op:integer;
begin
t:=TFileStream.Create(ExtractFilePath(paramstr(0))+'unit1.pas',fmopenread);

 t.Position:=3;  // Откуда читать
 op:=10;  // Сколько читать

 setlength(st,op);
 caption:=caption+' '+inttostr(t.read(st[0],op));
 // потом если не нужен файл то t.free
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2007, 08:14   #3
ZeroCool.
Новичок
Джуниор
 
Регистрация: 02.11.2007
Сообщений: 2
По умолчанию

Решил проблему при помощи указателей...
Я кстати и со стримами пробовал тоже не работало...
А почему нулевой эллемент передается в Read?

Последний раз редактировалось zetrix; 02.11.2007 в 08:27.
ZeroCool. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамический массив Dimon Паскаль, Turbo Pascal, PascalABC.NET 3 21.03.2008 18:08
Динамический массив _ares_ Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2007 23:54
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31
Динамический массив Mickle Общие вопросы Delphi 8 19.06.2007 06:45
Динамический массив + Dll. LEKA Общие вопросы Delphi 7 11.05.2007 20:05