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

Вниз

I/O error 998   Найти похожие ветки 

 
Чайник ©   (2010-01-27 23:09) [0]

I/O error 998

Как прочитать данные из файла в динамический массив?

Пытаюсь прочитать из файла массив данных:

type  
 TmfTriangle = record
   P1, P2, P3 : Integer;
   S : Extended;
 end;  
TmfArrayTriangles = array of  TmfTriangle;

const
 FILE_NAME = "E:\Программы\Tmp\tmp.dat";
 COUNT_TRI = 16;

var
 ANew : TmfArrayTriangles;

…………………………………………………………..
procedure TForm1.Button2Click(Sender: TObject);
var  SourceFile: file;
      DataSize: Integer;
begin

  DataSize := COUNT_TRI*SizeOf(TmfTriangle);
  try
      AssignFile(SourceFile, FILE_NAME);
      Reset(SourceFile);
      SetLength(ANew, COUNT_TRI);
      FillMemory(ANew, DataSize, 0);
      Seek(SourceFile, 0);
      BlockRead(SourceFile, ANew, DataSize);
  finally
    CloseFile(SourceFile);

  end;


Выдает :  “I/O error 998”
В windows.pas нашел:
{ Invalid access to memory location. }
 ERROR_NOACCESS = 998;

И как мне этого инвалида обойти?


 
Чайник ©   (2010-01-27 23:17) [1]

Пардон:

var  SourceFile: file of byte;


 
Игорь Шевченко ©   (2010-01-27 23:18) [2]


>    BlockRead(SourceFile, ANew, DataSize);


BlockRead(SourceFile, ANew^, DataSize);

?


 
Игорь Шевченко ©   (2010-01-27 23:19) [3]

или
BlockRead(SourceFile, ANew[0], DataSize);


 
Anatoly Podgoretsky ©   (2010-01-27 23:32) [4]

А почему не file of TmfTriangle


 
Чайник ©   (2010-01-27 23:43) [5]


> Anatoly Podgoretsky ©   (27.01.10 23:32) [4]
> А почему не file of TmfTriangle


в файле кроме массива TmfTriangle могут быть и другие данные, других типов, поэтому я и объявил его как байтовый.


> Игорь Шевченко ©   (27.01.10 23:18) [2]
>BlockRead(SourceFile,  ANew^, DataSize);


[Pascal Error] TexPassTypesConst.pas(303): E2017 Pointer type required


> Игорь Шевченко ©   (27.01.10 23:19) [3]
> или BlockRead(SourceFile, ANew[0], DataSize);


А разве при объявлении ANew : TmfArrayTriangles;
ANew - не есть УКАЗАТЕЛЬ на дин.массив?


 
Anatoly Podgoretsky ©   (2010-01-27 23:48) [6]


> в файле кроме массива TmfTriangle могут быть и другие данные,
>  других типов, поэтому я и объявил его как байтовый.

Это не важно, приведена законченая процедура, где данные читаются с нулевым смещением.


 
Чайник ©   (2010-01-27 23:53) [7]


> Это не важно, приведена законченая процедура, где данные
> читаются с нулевым смещением.


ну, это скорее заготовка процедуры, просто я споткнулся на первом же шаге...


> Игорь Шевченко ©   (27.01.10 23:19) [3]
> или BlockRead(SourceFile, ANew[0], DataSize);


Спасибо, заработало!


 
Игорь Шевченко ©   (2010-01-27 23:59) [8]


> А разве при объявлении ANew : TmfArrayTriangles;
> ANew - не есть УКАЗАТЕЛЬ на дин.массив?


Объявление BlockRead посмотри в справке


 
Германн ©   (2010-01-28 01:10) [9]


> А разве при объявлении ANew : TmfArrayTriangles;
> ANew - не есть УКАЗАТЕЛЬ на дин.массив?
>

Есть. Но для функций подобных BlockRead нужен адрес буфера "приема/передачи", а не "указатель на что-то".



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1263058858
GanibalLector
2010-01-09 20:40
2010.03.28
Интерфейс


15-1263146426
Petr V. Abramov
2010-01-10 21:00
2010.03.28
RBC празднует :)


15-1262726623
tmtlib
2010-01-06 00:23
2010.03.28
Компилятор в EXE на Delphi с исходниками.


2-1264666767
Вася
2010-01-28 11:19
2010.03.28
аналог Set Of


15-1262937611
@!!ex
2010-01-08 11:00
2010.03.28
Бесплатный NAT Proxy для Windows