Status d'un fichier

Résolu
adomarle Messages postés 41 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 15 juin 2012 - 15 déc. 2005 à 16:18
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Derniè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");
}

Merci d'avance,
Clem

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
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 :-)

/*
coq
MVP Visual C#
*/
3
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
15 déc. 2005 à 16:34
"Ca ne marche pas" c'est pas très explicite... Est-ce que ça te génère une exception?

-------------------------
Trambert le vert
0
zebobo5 Messages postés 273 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 6 février 2009 1
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

<hr>ZeBobo5
N'oubliez pas de cloturer votre post.
0
Rejoignez-nous