adomarle
Messages postés41Date d'inscriptionjeudi 18 septembre 2003StatutMembreDernière intervention15 juin 2012
-
15 déc. 2005 à 16:18
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
15 déc. 2005 à 18:48
Bonjour,
J'ai un souci, je veux savoir si un fichier est ouvert ou pas et je n'y arrive pas.
En fait, j'ai créé un service qui envoie automatiquement un fichier par mail lorqu'il voit ce fichier dans un certain répertoire.
Par contre, le mail s'envoie tout de même quand le fichier est utilisé par une autre appli.
J'ai testé le code suivant mais ça ne marche pas :
try {
f.Open(FileMode.Open); // f est un FileInfo
}
catch (System.SystemException e) {
MessageBox.Show(this, "FICHIER DEJA OUVERT");
}
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 15 déc. 2005 à 18:48
Salut,
Pour savoir si un fichier est ouvert par une autre application tu peux tenter une ouverture exclusive :
Ca donne qqch de ce genre :
private bool TryExclusiveOpen(string filePath, out FileStream fs)
{
try
{
fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
return true;
}
catch
{
fs = null;
return false;
}
}
Ce type de demande d'ouverture exclusive échouera même si le fichier est ouvert en accès partagé, par ce type d'ouverture par exemple :
File.Open(@"C:\test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
Tu sauras donc si le fichier est utilisé ou non.
Pour les applications telles que Notepad, tu ne peux pas savoir car elle ne garde pas le fichier ouvert après avoir lu son contenu :
lecture : ouverture => lecture => fermeture
enregistrement : ouverture => fermeture => fermeture
A l'inverse, des applications telles que Acrobat ( merci Mx ;-) ) gardent le fichier ouvert.
Un petit tour dans ProcessExplorer vous le montrera :-)
zebobo5
Messages postés273Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 6 février 20091 15 déc. 2005 à 17:22
Ton problème, c'est que ton fichier est bien ouvert, mais il n'est pas utilisé exclusivement par son appli.
Dc tu peux qd meme l'ouvrir et le lire.
Sinon, je ne pense pas que tu puisses savoir s'il est deja ouvert par un autre processus