2016-05-06 9 views
6

Questo è davvero difficile per me perché non conosco il termine corretto usato per questo ma essenzialmente quello che voglio realizzare è .. Se il mio codice non può essere eseguito salta sopra e ha provato la prossima cosa .. Non sono sicuro se ho bisogno di provare un ciclo di cattura & ma qui va.Come faccio a saltare il codice qualcosa se c'è un errore C# .NET

Come potete vedere sto cercando di eliminare roba dalla mia cartella Temp con una pressione di un pulsante e mi genera un errore sul mio PC dicendo che

L'accesso al percorso "nome del file" è negato.

enter image description here

vorrei il codice a trascurare che e saltare al file successivo e provare che una o ancora meglio basta dare il codice di accesso per eliminare il file, non è se il file è in uso di corso.

È possibile?

private void label6_Click(object sender, EventArgs e) 
{ 
    string tempPath = Path.GetTempPath(); 
    DirectoryInfo di = new DirectoryInfo(tempPath); 

    foreach (FileInfo file in di.GetFiles()) 
    { 
     file.Delete(); 
    } 
} 
+0

Sì, è possibile. E tu sei sulla strada giusta, penso. –

risposta

0

primo luogo si dovrebbe aggiungere condizioni il controllo di quello che potrebbe generare un errore. Se ci sono altre condizioni che non puoi controllare nel tuo codice, aggiungi un'istruzione try-catch.

6
foreach (FileInfo file in di.GetFiles()) 
{ 
    try 
    { 
     file.Delete(); 
    } 
    catch(Exception e) 
    { 
     // Log error. 
    } 
} 
+4

'catch (Exception e)' - non inserire mai più tale codice (rilevando tutti gli errori), 'catch (IOException e)' –

+2

Va bene usare in alcuni casi critici. Accantonare ciecamente è altrettanto grave. – mariocatch

+0

I wient con quel codice ma ho rimosso la e da catch (Exception e), hai detto che registrerà l'errore, dove esattamente registrerebbe l'errore? –

0

Ciò che si desidera è una funzionalità di programmazione molto comune denominata Gestione eccezioni o Gestione degli errori. L'utilizzo di questa funzione ti consente di dire al codice cosa fare se viene lanciata un'eccezione. In C# (e nella maggior parte delle lingue), si usa un blocco try-catch. A è più semplice, sembra che:

try 
{ 
    file.Delete(); 
} 
catch(Exception e) 
{ 
    //log error or display to user 
} 

//execution continues 

Se file.Delete() genera un'eccezione, l'eccezione viene 'catturato' nel blocco catch, e si può quindi esaminare l'eccezione e agire di conseguenza, prima di proseguire.

Alcune risorse:

+0

come faccio a farlo in modo che se si verifica un errore si passa alla voce successiva nella directory? –

+0

@ Alexander.Matt si dovrebbe avvolgere l'intero try/catch in una sorta di loop – Jonesopolis

+0

Qualsiasi ciclo specifico si consiglia? –

3

Basta prendere richiesti eccezioni (e nel tuo caso ignorare loro) :

private void label6_Click(object sender, EventArgs e) 
{ 
    string tempPath = Path.GetTempPath(); 
    DirectoryInfo di = new DirectoryInfo(tempPath); 

    foreach (FileInfo file in di.GetFiles()) 
    { 
     try 
     { 
      file.Delete(); 
     } 
     catch (IOException) 
     { 
      // ignore all IOExceptions: 
      // file is used (e.g. opened by some other process) 
     } 
     catch (SecurityException) { 
      // ignore all SecurityException: 
      // no permission 
     } 
     catch (UnauthorizedAccessException) 
     { 
      // ignore all UnauthorizedAccessException: 
      // path is directory 
      // path is read-only file 
     } 
    } 
} 
Problemi correlati