Zdar
Mám pro mě zdánlivě nevyřešitelný problém (Opět) pro lepší pochopení připojím kód
x:=0;
repeat
FOR ddd:=65 TO 90 DO begin
c:=chr(ddd);
AssignFile(F,PChar(c+':/5.txt'));
{$I-}
Reset(F);
{$I+}
Closefile(f);
IF IOresult<>0 THEN x:=0
ELSE begin
Reset(F);
Readln(F,s);
IF s = '123456' THEN x:=1;
s:='';
x:=1;
Closefile(f);
end;
end;
until x=1;
program má za účel permanentně testovat možné cesty vyměnitelných disků A-Z:/
//FOR ddd:=65 TO 90 DO begin c:=chr(ddd); -- použití 'A' TO 'Z' zklamalo ...
pokaždé testuje IOresult který má zabránit nežádoucímu otevření
pokud narazí na hledaný soubor , otevře ho po testu IOresult , a testuje 1. řádek na řadu znaků , a pokud řada znaků odpovídá
pokračuje dál v kódu
pokud ale program spustím , vyskočí fatal error - EInOutError
pokud vložím do komentáře cykl , převod čísla na znak a dosadím cestu k existujícímu textovému souboru,
vznikne error úplně nový , chybu tedy vidím v IOresult ale nedokázal jsem najít nic než standartní postupy .
Fórum › Delphi
IOresult - nelze ošetřit chyba
Možná se mýlím, ale:
Proč tam máš Reset a CloseFile dvakrát? Nestačilo by to jenom jednou? Myslím tím Reset stačí v tom komentáři, pokud nastane chyba, tak X:=0, pokud nenastane chyba zpracuješ soubor a ukončíš přes CloseFile (ostatní Reset a CloseFile už snad nebudou potřeba...)
odstraněním vznikne jiný error - začarovaný kruh - přikládám program
Řešim to osobně vždy jedině přes vyjímky try, except on EInOutError do , end; / try, finally (přikl. si najdeš i v Helpu). S ioresult jsem spokojenej nebyl taky, nedivim se ti...
Může ti posloužit i šikovný fileexists('existujetodlencto');
EInOutError vyřešen , stále však přetrvává problém s neexistujícími disky (Exception Processing Message c0000013 Parameters 75b4bf7c 75b4b7c) potřebuji znát identifikátor chyby pro její ošetření , nebo přímo kód na zjištění přítomnosti disku/mechaniky
tak to jsem asi jinej , moh bych poprosit o přepracování do funkčního stavu ? Po několika hodinách boje jsem docílil že to funguje asi na 30% počítačů tak jak má a 20% to alespoň neháže errory , když už to nedělá nic jinýho ... :-(
Chyb tam máš víc, ale největší problém je to, že IOresult dáváš ne za Reset, ale až za CloseFile (který nechápu, proč tam dáváš).
Poopravit se to dá třeba takhle, ale problémů tam zbývá pořád dost"
uses sysutils;
var x,ddd:longint;
f:text;
c:char;
s:string;
begin
x:=0;
repeat
FOR ddd:=65 TO 90 DO
begin
c:=chr(ddd);
Assign(F,c+':\5.txt');
{$I-}
Reset(F);
{$I+}
IF IOresult<>0 THEN x:=0
ELSE begin
Readln(F,s);
IF s = '123456' THEN x:=1; {???}
s:='';
x:=1; {???}
Close(f);
end;
end;
until x=1; {??? - uvedomujes si, ze X muze klidne zustat nula a ty se}
{tudiz dostanes do nekonecneho cyklu?}
end.
můj počítač na pěst --> už to funguje všude jen u mě ne , díky za rady :)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak ošetřit vyjímku... — založil marpit
Jak v C ošetřit vstupy pouze na čísla? — založil Ryan99
Jak ošetřit zadávání data ( datumu ) uživatelem? — založil avalagne
Jak ošetřit to, pokud vložená poždovaná hodnota není číslo... — založil market