Текущий архив: 2004.06.13;
Скачать: CL | DM;
ВнизERROR_INVALID_HANDLE Найти похожие ветки
← →
Schummi (2004-05-30 18:29) [0]Мастера, подскажите избавиться от ошибки I/O 6 Она означает ERROR_INVALID_HANDLE Возникает она вот как:
f:textfile;
while not eof(f) do
begin
readln(f,st);
try
... //действия с st, возникает ошибка EAccessViolation
except
... //обработка ошибки
end;
end;
и потом на строке readln(f,st); возникает I/O 6
Почему???
← →
Gero © (2004-05-30 18:34) [1]Потому что сначала файл нужно открыть для чтения. И assign сделать.
AssignFile(F, "c:\1.txt");
Reset(F);
← →
Schummi (2004-05-30 19:08) [2]ну да, да все я это сначало делаю. просто не писал, чтобы указать на более важное
← →
Gero © (2004-05-30 19:16) [3]То, что иногда считают не важным, может оказаться очень даже важным.
И хотелось бы увидеть весь код.
Кстати, для текстовых файлов применяется не eof, а seekeof.
← →
Kair © (2004-05-30 19:20) [4]>Gero © (30.05.04 19:16) [3]
>Кстати, для текстовых файлов применяется не eof, а seekeof.
Да нет же, все-таки EOF();
← →
Gero © (2004-05-30 19:23) [5]
> Да нет же, все-таки EOF();
Да, Eof тоже можно.
← →
Schummi (2004-05-30 19:41) [6]ok
Есть строка :
CALL DISP: 03 31 00A 0 00000000 00 5011 788480;
ее обраб нормально, а вот
CALL DISP: 02 0E 016 2367033 2D35000B 16 5011 785850;
уже облом. Этот облом ликвидируется в except, а вот с указателем на файл - облом!
Status.Panels.Items[0].PanelType:=sptGauge;
Status.Panels.Items[0].GaugeAttrs.Position:=0;
AssignFile(f,fn);
Reset(f);
Ln:=FileSize(f);
while not eof(f) do
begin
readln(f,st);
i:=Pos("call disp: ",LowerCase(st));
if i>0 then
try
i:=i+12;
st:=copy(st,i,pos(";",st)-i);
i:=1;
st:=st+" ";
l:=Length(st)-1;
w:="";
k:=0;
while i<=l do
begin
if st[i]+st[i+1]=" " then
begin
if k=0 then w:=w+" "
else
begin
if k=4 then
begin
Item[k-1]:=copy(w,1,2);
inc(k);
Item[k-1]:=copy(w,3,2);
inc(k);
Item[k-1]:=copy(w,5,2);
inc(k);
Item[k-1]:=copy(w,7,2);
end
else Item[k-1]:=w;
w:="";
end;
inc(k);
end
else
if st[i]<>" " then
w:=w+st[i];
inc(i);
end;
Cps:=FilePos(f);
if (Ln<>0) then Status.Panels.Items[0].GaugeAttrs.Position:=Round((Cps/Ln)*100);
except
on Exception do
begin
st:="Строка: "+#10+#13+"""+st+"""+#10+#13+
"не может быть обработана."+#10+#13+
"Номер сообщения: "+IntToStr(High(Store[0]))+#10+#13+
"Рекомендация: Вам необходимо найти эту строку в файле и удалить.";
MessageDlg(st,mtError,[mbOK],0);
end;
end;
end;
CloseFile(f);
← →
TUser © (2004-05-30 20:01) [7]Вообще здесь первым делом надо избавляться от AV. Сказал бы ты, в какой строке оно происходит ... . Скорее всего где-то неправильно рассчитываешь индекс символа в строке st.
← →
Schummi (2004-05-31 08:36) [8]что такое AV?
← →
evvcom © (2004-05-31 08:47) [9]Access Violation
← →
Schummi (2004-05-31 13:22) [10]Важно не то, что AV происходит, а важно то, что потом на строчке readln(f,st) выскакивает I/O 6
← →
Romkin © (2004-05-31 14:37) [11]Важно именно AV, млин. Интересно, как так можно, система орет, что у тебя все мозги куда попало в программе лезут, а ты тихо это давишь и продолжаешь?
А причина проста: то, что вызвало AV, предварительно затерло все вокруг, в том числе и данные в записи F... Вот дальше и орет о неправильном дескрипторе. Хорошо еще, что неправильный :))
Объясняю еще раз: наверняка какая-то переменная у тебя объявлена сразу перед f: textfile. При записи в нее не соблюдается ее граница, и код пишет в энту самую f и дальше, пока все не запортит. Тут система засекает непорядок и орет, что кирдык. А крик ты игнорируешь... Что захотел - то и поимел
← →
Schummi (2004-06-01 08:40) [12]А вот оно что! Вот объявление переменных
← →
Schummi (2004-06-01 08:41) [13]
var
st,w:string;
i,l,k:integer;
f:textfile;
Item:TICDMItem;
Ln,Cps:LongInt;
TICDMItem = array[0..MaxCol-1] of string;
← →
Schummi (2004-06-01 18:30) [14]Ну так что там?
← →
Palladin © (2004-06-01 18:46) [15]Наивно полагать что FilePos и FileSize будут работать с textfile. Как ты себе это представил я не знаю...
← →
Schummi (2004-06-02 08:45) [16]
> Palladin © (01.06.04 18:46) [15]
Однако работает!
Страницы: 1 вся ветка
Текущий архив: 2004.06.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.037 c