Détecter le déplacement d'un fichier

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 18 mai 2009 à 12:16
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 19 mai 2009 à 12:46
Bonjour à toutes et à tous.

Grâce à la classe FileSystemWatcher, j'arrive sans problème à detecter quand un fichier est renommé, créé ou supprimé. Cependant, lorsqu'il est déplacé (même d'un dossier que je "surveille" à un autre que je "surveille" aussi), plutôt que de m'indiquer qu'il est renommé de C:\dossierA\monfichier.txt à C:\dossierB\monfichier.txt, il m'indique que le premier fichier est supprimé et le deuxième est créé.

Apparemment (et d'ailleurs c'est logique), les deux événements sont générés en même temps.

Ma question est la suivante :
Comment faire pour faire la différence entre un fichier déplacé et un fichier supprimé plus un fichier créé ?

J'ai bien pensé à faire un timer du genre :

evt supprimer
if(timerExistWithValue(e.Name, "créé")){
annuleTimer(e.Name, "créé");
AlertFichierDeplacé(e.Name);
}
else
{
lancerTimer(e.Name, "supprimé");
}

evt creer
if (timerExistWithValue(e.Name, "supprimé")){
annuleTimer(e.Name, "supprimé");
AlertFichierDeplacé(e.Name);
}
else
{
lancerTimer(e.Name, "créé");
}

evt timerfini
foreach(timer)
{
if(timer.type == "supprimé") AlertFichierSupprimé(timer.file);
else AlertFichierCréé(timer.file)
}

Bon, c'est clairement du pseudo code, j'ai pas cherché à faire propre, c'est juste pour que vous comprenniez le principe. (le timer serait très court (quelques millisecondes))

Cependant, cette méthode ne me semble vraiment pas propre. Voyez-vous un autre moyen ?

Merci d'avance.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -

3 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
19 mai 2009 à 10:54
Pas d'idée ?

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
rours Messages postés 61 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 24 février 2010
19 mai 2009 à 12:17
En fait tu voudrais faire en sorte que si la création/suppression sont fait dans un délais ultra court (impossible pour un humain), et bien tu consideres cela comme un renommage ?


Ca me semble pas mal
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
19 mai 2009 à 12:46
C'est à peu près ça (en vérifiant également que le nom du fichier est identique, car un programme pourrait supprimer un fichier et en recréer un dans un laps de temps aussi court).

Cette méthode doit marcher, théoriquement (pas encore testé), mais n'y a-t-il pas moyen, lorsque 2 événement sont levés au même moment, de détecter ça plus simplement ?

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
Rejoignez-nous