Diskuze: Vyvolání vyjímky

C# .NET .NET (C# a Visual Basic) Vyvolání vyjímky American English version English version

Avatar
petr.chatar.anton:

Ahoj,
chci se Vás zeptat, zda jsem správně použil vyvolání vyjímky v následujícím kódu. Neměl bych to vyvolání a zachycení použít spíš v metodě ExistujeSoubor třídy Soubory a tady zrušit tu podmínku If?

string zpracovavanySoubor = "u:\\kopie\\personal\\dappvA.cop";
           Soubory soub = new Soubory(zpracovavanySoubor, "1338A");
           string zprava = "";
           try
           {
               if (!soub.ExistujeSoubor())
               {
                   zprava = "Neexistuje nebo není přístupný soubor " + zpracovavanySoubor;
                   throw new InvalidOperationException(zprava);
               }
           }
           catch (InvalidOperationException ex)
           {
               MessageBox.Show(ex.Message);
           }
 
Odpovědět 19.5.2015 10:46
Avatar
Odpovídá na petr.chatar.anton
Michal Štěpánek:

Vyjímky bys měl tvořit v třídě a ve formu je jen zobrazovat

Nahoru Odpovědět 19.5.2015 13:39
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
petr.chatar.anton:

No, to je jen konzolová aplikace, MessageBox tam používám jen k zobrazování zpráv. Ještě jsem zapomněl dodat, že tenhle kód je součástí metody Main ve třídě Program.
Šlo mi spíš o to, abych ukončil program, pokud mi soub.Existuje­Soubor() vrátí False a dal to uživateli nějak najevo. Ale podle Tvé odpovědi bych tu vyjímku asi měl vyvolat spíš už v metodě ExistujeSoubor() ve třídě Soubory.

 
Nahoru Odpovědět  +1 19.5.2015 14:09
Avatar
Odpovídá na petr.chatar.anton
Michal Štěpánek:

Ano, vyjímky vyvolávat v metodě ve třídě a zpracovávat (zobrazovat) v uživatelském prostředí

Nahoru Odpovědět 19.5.2015 14:11
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
petr.chatar.anton:

A prosím Tě, jak pak způsobím v ošetření vyjímky, aby se program ukončil? A nevrátil se zpátky do metody Main()?

 
Nahoru Odpovědět 19.5.2015 14:18
Avatar
Odpovídá na petr.chatar.anton
Michal Štěpánek:

Do Main() se vrátit musí a tam to ukončíš v případě vyhození vyjímky. Program se neukončuje v třídě, ale v prostředí, které komunikuje s uživatelem.

Editováno 19.5.2015 14:20
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 19.5.2015 14:19
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na petr.chatar.anton
Michal Štěpánek:

A pokud to není vysloveně nutnost, vyhnul bych se zpracovávat soubory přes mapovaný disk. Způsobuje to jen problémy, pokud to nemáš dostatečně ošetřeno. Pokud použiješ relativní cestu, ušetříš si spoustu starostí...

Nahoru Odpovědět 19.5.2015 14:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
petr.chatar.anton:

Mohl bys mi ještě trošku rozvést tohle:
"tam to ukončíš v případě vyhození vyjímky"
V obsluze vyjímky v metodě, kde byla vyvolaná naplním nějakou proměnou, kterou pak v Main() otestuju?

 
Nahoru Odpovědět 19.5.2015 14:27
Avatar
Odpovídá na petr.chatar.anton
Michal Štěpánek:

v části "catch" se ti má zobrazit vyjímka, tak to v této části ukončíš.

Nahoru Odpovědět 19.5.2015 14:29
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.