Comment savoir que File.Copy a réussi?
La méthode statique File.Copy(String, String)
ne retourne pas une valeur. Comment puis-je savoir par programmation si la fonction a réussi ou pas ? Si il n'y a pas de levée d'une exception, File.Copy
va bien. Mais je me demande au sujet de comment mettre "aucune exception" comme un état.
Quelque chose comme ceci:
if(no exception happened){
//my code goes here
}
Edit:j'ai résolu le problème en utilisant un simple compteur comme suit:
int i=0;
try{
File.Copy();
}
catch(e1){
i++;
}
catch(e2){
i++;
}
if(i==0){
//my code goes here
}
Merci pour tous les contributeurs. Je vais aller dans vos réponses à choisir le meilleur.
source d'informationauteur Aan
Vous devez vous connecter pour publier un commentaire.
Si l'opération ne jette pas une exception, cela signifie qu'il a réussi. La liste des exceptions possibles est disponible ici :
Erreurs
Si la méthode ne renvoie pas une exception, aucune erreur ne s'est produite. La méthode a été en mesure d'effectuer le travail qu'il a promis de ne plus le faire, donc il va sortir de la voie, et ne pas essayer de retourner une sorte de code d'état. Vous n'aurez pas besoin de vérifier un code d'état parce que vous savez qu'elle a réussi.
Si la méthode d'échec de l'opération de copie, une exception sera levée. Dans ce cas, la méthode n'était pas en mesure d'effectuer le travail qu'il a promis qu'il ferait, ce qui signifie quelque chose de bizarre (exceptionnel) arrivé, alors une exception est levée. Depuis une exception est levée, vous êtes forcé de traiter avec elle, ou votre programme de coups. Donc, il n'y a pas de point de contrôle pour un code d'état. Vous ne pouviez pas écrire n'importe quel code qui serait capable de lire ce code d'état, de toute façon, puisque le statut de code de vérification ne serait jamais atteint. Flux de Code serait aller à l'
catch
bloc, ou à la fin du programme.Ces concepts sont à la base de la gestion des erreurs à l'aide d'exceptions.
Comment gérer les exceptions
Sauf en cas de nécessité, et ont une façon raisonnable de récupérer à partir de l'exception, alors ne pas les traiter. Laissez votre programme d'exploser. Ainsi, il sera beaucoup plus facile de trouver des bugs dans votre code dans la nature, depuis une exception non gérée va produire une trace de la pile, ce qui va vous dire exactement quelle partie de votre programme a explosé, et la façon dont le code obtenu à ce point.
Si vous avez un moyen raisonnable de les récupérer (par exemple, il suffit d'afficher un message d'erreur à l'utilisateur et recommencer l'opération, ou de les laisser en entrée un paramètre différent), alors vous pouvez écrire un
try
/catch
bloc. Écrire du code qui pourrait jeter une exception dans letry
bloc, et d'écrire votre code de récupération dans lecatch
bloc.Noter que vous ne devriez jamais attraper la base de
Exception
type, et au lieu de cela attirera spécifiques dérivés de types d'exceptions que vous pouvez gérer (par exemple,FileNotFoundException
). Cela a un sens parce que vous ne pouvez probablement pas d'écrire le code qui va réussir à récupérer à partir d'unOutOfMemoryException
et cette exception pourrait être lancé à tout moment dans votre code. Si vous attrapezException
puis vous écrivez du code qui tente de gérer rienet pas seulement les exceptions qui vous intéresse.Achèvement
File.Copy
est une opération synchrone. Donc, une fois que la méthode est terminée, puis la copie est terminée.Cela signifie que vous pouvez écrire une ligne de code immédiatement après la copie de la ligne. Et que le code peut s'attendre à du fichier à y être, pour être complètement copié, et pour être accessible.
Si la méthode ne renvoie pas une exception, elle signifie qu'il a réussi.
si aucune exception n'est prévue que cela signifie que le fichier est un succès entièrement copié ...
Si je ne sais pas quelle situation vous êtes , mais j'ai quelque chose de semblable situation où je dois Copier des fichiers et des besoin de savoir si elle a réussi, Comme je pouvais pas trouver quelque chose d'utile .NET API ma seule option était de continuer à essayer jusqu'à ce qu'il réussit (essayez pas de. de fois) par exemple dans le code suivant, j'ai du abandonner après 5 essais