Sollevare un'eccezione ma continuare l'elaborazione

mercoledì 28 maggio 2008 - 09.56

liveforever81 Profilo | Junior Member

Salve a tutti!

Dovrei fare un programmino molto semplice.
Sto usando il try-catch in modo da monitorare tutta l'elaborazione.

Questo programmino altro non fa che controllare dei file in una cartella...
Ho notato però che se una determinata condizione non è soddisfatta (come previsto), il programma mi salta al "catch" però poi esce e non termina l'elaborazione (ed è un guaio se vi sono altri files nella cartella).

Come prevedere un "rientro" nel 'try' ogniqualvolta viene sollevata un'eccezione "controllata"?

Grazie a tutti!

Wamba Profilo | Expert

Suppongo che tu lavori in un ciclo, probabilmente hai messo il try-catch esterno al ciclo stesso, prova a fare una cosa così:

List<string> FileErrati = new List<string>();
while (o for o il ciclo che ti pare)
{
try
{
//... Operazioni da fare
}
catch (TipoEccezioneGestita1 e1)
{
FileErrati.add(NomeFile);
}
catch (TipoEccezioneGestita2 e2)
{
FileErrati.add(NomeFile);
}
catch
{
//Eccezione non gestita
}
}

Fammi sapere se le mie supposizioni sono esatte
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

liveforever81 Profilo | Junior Member

Il programma è così strutturato:

Main() { try { foreach (file nella directory) { //elabora //poi c'è un if che controlla la lunghezza if(file.lenght>4) { //PROCEDI } else { throw new Exception("Il file da spostare è piccolo"); //A 'sto punto mi salta al catch } } } catch(Exception ex) { //Genero lo stack trace //mi esce dal programma } }

Vorrei che sollevasse l'eccezione dell'else sulla lunghezza del file, ma poi tornasse al foreach per elaborare il file successivo...
Spero d'esser stato chiaro

Wamba Profilo | Expert

Il tuo loop diventa così:
foreach (file nella directory)
{
try
{
//elabora
//poi c'è un if che controlla la lunghezza
if(file.lenght>4)
{
//PROCEDI
}
else
{
throw new Exception("Il file da spostare è piccolo"); //A 'sto punto mi salta al catch
}
}
catch(Exception ex)
{
//Genero lo stack trace
//Entra nel loop seguente
}
}

Quello che non capisco è: perchè vuoi usare un'eccezione? Non ti basta spostare il lavoro del catch dentro l'else?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5