Sto creando un'utilità da riga di comando che cancellerà sottodirectory/file. Se un file è in uso, viene lanciato il numero System.IO.IOException
. Io uso un blocco try-catch nel mio ciclo for.È una cattiva pratica mettere una presa di prova in un ciclo For?
Domanda:
1.Is è cattiva pratica di avere un try-catch all'interno di un ciclo?
2. Se sì, qual è un'alternativa migliore?
My Code:
System.IO.DirectoryInfo di = new DirectoryInfo(path);
foreach (FileInfo file in di.GetFiles())
{
try
{
file.Delete();
}
catch(System.IO.IOException)
{
Console.WriteLine("Please Close the following File {0}", file.Name);
}
}
Il messaggio presuppone che l'errore sia dovuto all'apertura del file. Cosa succede se il file non può essere cancellato per qualche altro motivo? –
@EricLippert - Stavo pensando esattamente a questo, ma, non sono sicuro di come procedere. Come andresti sulla gestione se un file non può essere cancellato per un altro motivo? –
Bene, prima, decidi se a qualcuno importa. Se a nessuno importa, non ti preoccupare. Se a qualcuno importa, la prossima cosa da fare è decidere come dirglielo. L'output della console è forse un buon modo, forse no. Difficile dire senza capire il resto del programma. La prossima cosa da fare è decidere cosa dire loro. Dì loro la verità: "file blah.txt non può essere cancellato". Considera di dare il messaggio dall'eccezione per aggiungere più contesto. Ma la verità che tu sai qui è che il file non può essere cancellato, quindi comincia da quello. –