OVH Cloud OVH Cloud

Fichier en cours d'utilisation...

2 réponses
Avatar
PePiCK
Bonjour,

Petit nouveau dans le monde du dot.net, je cherche à savoir comment faire
ceci.
Situation...
Je suis en train de me créer un petit «Windows Services» qui monitor un
dossier et qui compresse (.zip) tout fichier qui y est transféré.
Le principe fonctionnait assez bien avec un timer... au 5 minutes :)
Maintenant, je veux enlever le timer, pour prendre les événements du
FileSystemWatcher.
Le problème...
L'évenement Created est déclancher au début de la copie du fichier.
Plusieurs évenements Changed pendant que le fichier se copie.
Pas d'évenement de fin de copie :(
Je cherche à savoir à quel moment déclencher la compression du fichier (à la
fin, oui ;) mais comment trouver ce moment ?
J'ai pensé vérifier si le fichier est en cours d'utilisation ??? Mais j'ai
rien trouver sur le sujet pour le moment.

Merci de votre aide !

PePiCK

2 réponses

Avatar
Zazar
Bonsoir,

Petit nouveau dans le monde du dot.net, je cherche à savoir comment faire
ceci.
Situation...
Je suis en train de me créer un petit «Windows Services» qui monitor un
dossier et qui compresse (.zip) tout fichier qui y est transféré.
Le principe fonctionnait assez bien avec un timer... au 5 minutes :)
Maintenant, je veux enlever le timer, pour prendre les événements du
FileSystemWatcher.
Le problème...
L'évenement Created est déclancher au début de la copie du fichier.
Plusieurs évenements Changed pendant que le fichier se copie.
Pas d'évenement de fin de copie :(
Je cherche à savoir à quel moment déclencher la compression du fichier (à


la
fin, oui ;) mais comment trouver ce moment ?
J'ai pensé vérifier si le fichier est en cours d'utilisation ??? Mais


j'ai
rien trouver sur le sujet pour le moment.



Vous pouvez peut-être vous en sortir en considérant que la copie du fichier
est achevée, si la date&heure de dernier accés du fichier + 5 secondes est
supérieure à la date&heure actuelle (en gros vous considérez que s'il n'y a
pas eu d'activité sur le fichier au cours des 5 dernières secondes, c'est
bon).
Sinon, comment les fichiers arrivent dans ce répertoire ? Est-ce via une
autre application ? Celle-ci ne pourrait-elle pas notifier la votre de la
fin de copie ?
De plus avez-vous réellement besoin de faire des compressions en "temps
réel" ? Si c'est pour faire des sauvegardes par exemple, il peut être plus
efficace de les faire toutes les 2 heures : vous n'aurez pas à monitorer les
activités du disque, vous risquez moins d'utiliser le disque en même temps
que d'autres applications, vous pourrez appliquer votre module de
compression sur tous les fichiers en même temps (quoique sur le format zip,
ce point est peu crucial il me semble).

--
Zazar
Avatar
Paul Bacelar
Il n'est pas possible d'être prévenu avec FileSystemWatcher que le fichier a
été libéré et, de toutes façon, ne règlerait en rien votre problématique car
la notification n'est pas synchrone et donc un autre processus, ou le même,
peut de nouveau ouvrir le fichier.

Pour une première approche, je pense qu'un timer avec une politique
d'attente à la CDMA-CD (Ethernet) sur l'ouverture du fichier en mode
exclusif serait convenable.

Si vous voulez faire un produit commercial, je vous conseil de voir du coté
des primitives de journalisassions de NTFS et des shadowcopy de Win2003.
--
Paul Bacelar


"PePiCK" wrote in message
news:#
Bonjour,

Petit nouveau dans le monde du dot.net, je cherche à savoir comment faire
ceci.
Situation...
Je suis en train de me créer un petit «Windows Services» qui monitor un
dossier et qui compresse (.zip) tout fichier qui y est transféré.
Le principe fonctionnait assez bien avec un timer... au 5 minutes :)
Maintenant, je veux enlever le timer, pour prendre les événements du
FileSystemWatcher.
Le problème...
L'évenement Created est déclancher au début de la copie du fichier.
Plusieurs évenements Changed pendant que le fichier se copie.
Pas d'évenement de fin de copie :(
Je cherche à savoir à quel moment déclencher la compression du fichier (à


la
fin, oui ;) mais comment trouver ce moment ?
J'ai pensé vérifier si le fichier est en cours d'utilisation ??? Mais


j'ai
rien trouver sur le sujet pour le moment.

Merci de votre aide !

PePiCK