Existe-t-il un moyen de vérifier si un fichier est en cours d'utilisation ?

Existe-t-il un moyen de vérifier si un fichier est en cours d’utilisation ?

REMARQUE mise à jour sur cette solution : La vérification avec FileAccess.ReadWrite échouera pour les fichiers en lecture seule, la solution a donc été modifiée pour vérifier avec FileAccess.Read.

ORIGINAL :
J’ai utilisé ce code ces dernières années, et je n’ai eu aucun problème avec.

Comprenez votre hésitation à utiliser les exceptions, mais vous ne pouvez pas les éviter tout le temps :

protected virtual bool IsFileLocked(FileInfo file)
{
    try
    {
        using(FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None))
        {
            stream.Close();
        }
    }
    catch (IOException)
    {
        //the file is unavailable because it is:
        //still being written to
        //or being processed by another thread
        //or does not exist (has already been processed)
        return true;
    }

    //file is not locked
    return false;
}