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;
}