Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB.NET] Gestione errori in un ciclo For Each

    ciao a tutti avrei bisogno di un piccolo aiutino. Ho una piccola applicazione che legge da una directory predefinita dei file e li allega a una mail, dopo di che li sposta in una cartella. I miei problemi sono questi:
    se i file sono aperti (ad esempio in un pdf reader) gestisco l'errore tramite try e catch chiedendo all'utente se vuole chiudere il reader e riprovare a spostare il file ma come faccio a far ripartire il ciclo for each o devo rimettere la move nel catch ?
    Secondo problema come distinguo un errore di file aperto da un errore di disco pieno a parte la stampa dei messaggi?
    codice:
    For Each filename As String In System.IO.Directory.GetFiles(directory_origine)
                Try
                    Name = Path.GetFileName(filename)
                    destinazione = path_directory & "\" & Name
                    
                    File.Move(filename, destinazione)
    
                Catch Err As System.IO.IOException
                    msg = "E-mail inviata." & vbCrLf & vbCrLf & "Non è stato possibile spostare il file"
                    msg = msg & Err.Message & vbCrLf & vbCrLf & "chiudere il file e premere riprova per         continuare" & vbCrLf & "o cancella per terminare il programma"
                    
    Dim risposta = MsgBox(msg, style)
                    If risposta = MsgBoxResult.Retry Then
    ...
                    Else
                        Application.Exit()
                    End If
    
                End Try
    
            Next

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,948
    Quote Originariamente inviata da ravamauro Visualizza il messaggio
    se i file sono aperti (ad esempio in un pdf reader) gestisco l'errore tramite try e catch chiedendo all'utente se vuole chiudere il reader e riprovare a spostare il file ma come faccio a far ripartire il ciclo for each o devo rimettere la move nel catch ?
    Credo che la soluzione più semplice sia quella di innestare due cicli, uno dentro l'altro: il ciclo più esterno enumera i file da elaborare, mentre quello più interno si ripete fino a quando l'operazione da eseguire sul file specifico va a buon fine.

    Fino a quando si verificano eccezioni nel ciclo più interno, l'operazione viene così ripetuta.

    Quando l'operazione va a buon fine o viene abbandonata, si torna nel ciclo esterno che passa eventualmente al file successivo.

    Quote Originariamente inviata da ravamauro Visualizza il messaggio
    Secondo problema come distinguo un errore di file aperto da un errore di disco pieno a parte la stampa dei messaggi?
    Puoi usare forse la proprietà HResult, che dovrebbe essere diversa da caso a caso.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.