![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
I/O error 998 [D2005, XP]
Чайник © (2010-01-27 23:09:00)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-28 01:10:00) [1]
> А разве при объявлении ANew : TmfArrayTriangles;
> ANew - не есть УКАЗАТЕЛЬ на дин.массив?
>
Есть. Но для функций подобных BlockRead нужен адрес буфера "приема/передачи", а не "указатель на что-то".
Игорь Шевченко (2010-01-27 23:59:00) [2]
> А разве при объявлении ANew : TmfArrayTriangles;
> ANew - не есть УКАЗАТЕЛЬ на дин.массив?
Объявление BlockRead посмотри в справке
Чайник (2010-01-27 23:53:00) [3]
> Это не важно, приведена законченая процедура, где данные
> читаются с нулевым смещением.
ну, это скорее заготовка процедуры, просто я споткнулся на первом же шаге...
> Игорь Шевченко © (27.01.10 23:19) [3]
> или BlockRead(SourceFile, ANew[0], DataSize);
Спасибо, заработало!
Anatoly Podgoretsky (2010-01-27 23:48:00) [4]
> в файле кроме массива TmfTriangle могут быть и другие данные,
> других типов, поэтому я и объявил его как байтовый.
Это не важно, приведена законченая процедура, где данные читаются с нулевым смещением.
Чайник (2010-01-27 23:43:00) [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:32:00) [6]А почему не file of TmfTriangle
Игорь Шевченко (2010-01-27 23:19:00) [7]или
BlockRead(SourceFile, ANew[0], DataSize);
Игорь Шевченко (2010-01-27 23:18:00) [8]
> BlockRead(SourceFile, ANew, DataSize);
BlockRead(SourceFile, ANew^, DataSize);
?
Чайник (2010-01-27 23:17:00) [9]Пардон:
var SourceFile: file of byte;