Вниз
Скачать: CL | DM;

Ошибка при чтении файла   Найти похожие ветки 

← →
Sergik   (2003-04-16 16:21) [0]

Объясните в чем ошибка: в процедуре SaveAs я сохраняю значения из массива записей в фаил и, для проверки, вывожу часть содержимого каждой записи из файла в ShowMessage - все работает,
но, если я пытаюсь прочитать то же самое содержимое в процедуре Open ничего не получается. Пожалуйста помогите разобраться (фаил не типизированный).


procedure TMain.Open1Click(Sender: TObject);
var
T: RCommandParams;
begin
if OpenDialog1.Execute then
begin
AssignFile(SPOFile, OpenDialog1.FileName);
Reset(SPOFile, 1);
j := 0;
while not EOF(SPOFile) do
begin
Seek(SPOFile, j * SizeOf(RCommandParams));
BlockRead(SPOFile, T, SizeOf(RCommandParams));
ShowMessageFmt("Text: %s, ItemIndex %d",[ T.Text,
T.ItemIndex]);
Inc(j);
end;
CloseFile(SPOFile);
end;
end;

procedure TMain.Saveas1Click(Sender: TObject);
var
T: RCommandParams;
begin
if SaveDialog1.Execute then
begin
AssignFile(SPOFile, SaveDialog1.FileName);
ReWrite(SPOFile, 1);
try
for i := 0 to High(ListOfCellsSG) do
BlockWrite(SPOFile, ListOfCellsSG[i], SizeOf
(RCommanddParams));
finally
CloseFile(SPOFile);
end;
end;
Reset(SPOFile, 1);
j := 0;
while not EOF(SPOFile) do
begin
Seek(SPOFile, j * SizeOf(RCommandParams));
BlockRead(SPOFile, T, SizeOf(RCommandParams));
ShowMessageFmt("Text: %s, ItemIndex %d",
[T.Text, T.ItemIndex]);
Inc(j);
end;
CloseFile(SPOFile);
end;


← →
MBo ©   (2003-04-16 16:29) [1]

объявление RCommandParams?


← →
Sergik   (2003-04-16 16:30) [2]

RCommandParams = record
Text: String;
ItemIndex: integer;
Params: array [0..1] of integer;
Col: integer;
Row: integer;
end;


← →
Внук ©   (2003-04-16 16:30) [3]

Ничего не получается - очень размытоое понятие. Что происходит? Какая ошибка выдается, если выдается в IOResult?


← →
Skier ©   (2003-04-16 16:35) [4]

Очень похоже что проблема в поле - Text: String;


← →
Anatoly Podgoretsky ©   (2003-04-16 16:35) [5]

В любом случае смцщает это Text: String;, какой смысл писать читать указатель?


← →
MBo ©   (2003-04-16 16:36) [6]

Text: String;

Вот где собака зарыта!
Используй string[число<256], если это возможно


← →
Sergik   (2003-04-16 16:41) [7]

Спасибо за совет с ограничением длины строки. По-моему получиться


← →
Внук ©   (2003-04-16 16:44) [8]

Дело не в ограничении, дело в фактически разных типах данных, точнее, в различиях внутреннего преставления этих данных.


← →
Sergik   (2003-04-16 16:45) [9]

А по подробнее можно. Хотелось бы все-таки поняти причину :)


← →
Внук ©   (2003-04-16 16:48) [10]

Подробнее - в случае объявления string по умолчанию фактически используется тип AnsiString. При указании длины будет использоваться тип ShortString. А разница в их реализации описана в Help.

Кстати, без указания длины, если просто заменить string на ShortString, вроде тоже должно работать.


← →
MBo ©   (2003-04-16 16:48) [11]

string, т.е по умолчанию ansistring - на самом деле указатель, и в файл пишется не содержимое строки, а адрес, который в другой момент времени не имеет смысла.


← →
Polevi ©   (2003-04-16 16:48) [12]

Text: String;
данной поле содержит не строку а 4 байта ее адреса
эти 4 байта ты и пишешь в файл


← →
Sergik   (2003-04-16 17:01) [13]

Спасибо, я понял.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.014 c
1-91383
kip/bl/
2003-04-16 02:44
2003.04.28
Metaclass


14-91495
Жорик
2003-04-10 14:05
2003.04.28
Удаленное управление GetRight


4-91595
Mantic0re
2003-03-03 06:56
2003.04.28
Как раскрасить scrollbar и combobox?


14-91501
Иван Шихалев
2003-04-10 13:18
2003.04.28
Чиста про творчество :)


3-91168
TempAlly
2003-04-09 14:18
2003.04.28
Date-константа в TQuery.Filter




   Наверх