Comment vérifier le verrouillage du fichier ?

Existe-t-il un moyen de vérifier si un fichier est verrouillé sans utiliser de bloc try/catch ?

Pour le moment, la seule façon que je connaisse est d'ouvrir simplement le fichier et d'attraper n'importe quel System.IO.IOException.

请先 登录 后评论

3 réponses

Lasse Vågsæther Karlsen

Non, malheureusement, et si vous y réfléchissez bien, cette information serait de toute façon sans valeur puisque le fichier pourrait être verrouillé la seconde suivante (lire : courte durée).

Pourquoi avez-vous spécifiquement besoin de savoir si le fichier est verrouillé de toute façon ? Le savoir pourrait nous donner une autre façon de vous donner de bons conseils.

Si votre code ressemble à ceci :

if not locked then
    open and update file

Ensuite, entre les deux lignes, un autre processus pourrait facilement verrouiller le fichier, vous donnant le même problème que vous essayiez d'éviter au départ : les exceptions.

请先 登录 后评论
Sören Kuklau

Ensuite, entre les deux lignes, un autre processus pourrait facilement verrouiller le fichier, vous donnant le même problème que vous essayiez d'éviter au départ : les exceptions.

Cependant, de cette façon, vous sauriez que le problème est temporaire et réessayez plus tard. (Par exemple, vous pouvez écrire un thread qui, s'il rencontre un verrou en essayant d'écrire, continue de réessayer jusqu'à ce que le verrou disparaisse.)

L'IOException, d'autre part, n'est pas en soi suffisamment spécifique pour que le verrouillage soit la cause de l'échec de l'IO. Il peut y avoir des raisons qui ne sont pas temporaires.

请先 登录 后评论
DixonD

Lorsque j'ai été confronté à un problème similaire, j'ai terminé avec le code suivant :

public bool IsFileLocked(string filePath)
{
    try
    {
        using (File.Open(filePath, FileMode.Open)){}
    }
    catch (IOException e)
    {
        var errorCode = Marshal.GetHRForException(e) & ((1 << 16) - 1);

        return errorCode == 32 || errorCode == 33;
    }

    return false;
}
请先 登录 后评论
  • 2 abonnés
  • 0 favoris,363 Feuilleter
  • ricree posée à 2023-03-02 18:18