Comment puis-je vérifier si un Fichier.Supprimer() va réussir sans l'essayer, en C#?

En C#, Système.IO.Fichier.Supprimer(filePath) supprimer le fichier spécifié, ou lever une exception. Si l'utilisateur courant n'a pas l'autorisation de supprimer le fichier, il faudra lever un UnauthorizedAccessException.

Est-il un moyen que je peux dire à l'avance si la suppression est susceptible de lever une UnauthorizedAccessException ou pas (c'est à dire de la requête de l'ACL pour voir si l'identité du thread actuel a la permission de supprimer le fichier spécifié?)

Au fond, je cherche à faire:

if (FileIsDeletableByCurrentUser(filePath)) {
    /* remove supporting database records, etc. here */
    File.Delete(filePath);
}

mais je n'ai aucune idée de comment mettre en œuvre FileIsDeletableByCurrentUser().

  • Il est assez difficile de gérer des conditions de course. Que faire si le fichier "a" supprimables au moment de l'évaluation FileIsDeletableByCurrentUser mais tout de suite après, un autre processus verrouille le fichier?
  • Vous ne pouvez pas supprimer le fichier si il est ouvert par un autre processus (comme, disons, IIS ou bureau). Ça peut être la même exception, mais vous ne pourriez pas le dire tout simplement en regardant les autorisations
  • Êtes-vous sûr que l'utilisation d'un try/catch pour les exceptions spécifiques n'est pas la bonne façon de gérer cela? Il semble que vous essayez de ré-inventer la roue ici.
  • exemple de code avec la solution finale?
  • Ce Microsoft doc lien doit être utile si vous voulez écrire le code de vérification des autorisations par vous même: docs.microsoft.com/en-us/dotnet/api/...