Главная страница
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-1262485087
Кто б сомневался
2010-01-03 05:18
2010.03.28
RSA шифр


1-1245677150
Дмитрий Белькевич
2009-06-22 17:25
2010.03.28
Возможно ли поменять resourcestring в рантайме?


2-1264500883
Вася
2010-01-26 13:14
2010.03.28
Динамическое создание экземпляра ТТreeNodes


15-1262992619
Германн
2010-01-09 02:16
2010.03.28
Редактор wav-файлов


15-1262631027
sava
2010-01-04 21:50
2010.03.28
Как с помощью делфи уменьшить вес фотки