Форум: "Начинающим";
Текущий архив: 2010.03.28;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c