Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1277 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Savoir si un .zip est en cours d'écriture

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Savoir si un .zip est en cours d'écriture

n°2102671
chapi
Downgradé
Posté le 21-09-2011 à 15:35:44  profilanswer
 

Bonjour,
 
Connaissez-vous une solution (si cela est possible) pour savoir si un zip est en cours d'écriture.
 
L'idée étant qu'un robot scanne un répertoire dans lequel des zip sont déposés, je voudrais déplacer les zips qu'une fois leur écriture terminée, en sachant que je n'ai pas la main sur l'écriture de ce zip (généré par un tiers).
 
Et je voudrais me passer de l'envoi par le tiers d'un fichier EOF après l'écriture du zip.
 
je ne sais pas si je suis clair...
 
Merci


---------------
I drive at 88mph ! Just in case...
mood
Publicité
Posté le 21-09-2011 à 15:35:44  profilanswer
 

n°2102674
Elmoricq
Modérateur
Posté le 21-09-2011 à 15:54:12  profilanswer
 

Plusieurs solutions :

  • (si le .zip est généré à la volée) Voir avec le tiers pour passer par un répertoire d'écriture, et faire déplacer le fichier vers son lieu de dépôt une fois l'écriture terminée
  • (si le fichier est transféré) Faire transférer sous une extension temporaire, et renommer une fois le transfert terminé
  • (si rien de tout cela n'est envisageable) Vérifier la date de dernière modification du fichier, et attendre qu'elle soit plus vieille que, je ne sais pas, 30s ou 1min pour commencer à le traiter.


Ce n'est pas exhaustif, surtout que je connais mal le monde windows, mais on doit pouvoir trouver d'autres solutions, de la plus crade à la plus sympa...

Message cité 1 fois
Message édité par Elmoricq le 21-09-2011 à 15:58:37
n°2102678
chapi
Downgradé
Posté le 21-09-2011 à 16:10:17  profilanswer
 

Elmoricq a écrit :

Plusieurs solutions :


  • (si le .zip est généré à la volée) Voir avec le tiers pour passer par un répertoire d'écriture, et faire déplacer le fichier vers son lieu de dépôt une fois l'écriture terminée
  • (si le fichier est transféré) Faire transférer sous une extension temporaire, et renommer une fois le transfert terminé
  • (si rien de tout cela n'est envisageable) Vérifier la date de dernière modification du fichier, et attendre qu'elle soit plus vieille que, je ne sais pas, 30s ou 1min pour commencer à le traiter.


Ce n'est pas exhaustif, surtout que je connais mal le monde windows, mais on doit pouvoir trouver d'autres solutions, de la plus crade à la plus sympa...Ah mais c'est carrément pas bête ça !  
Ca me convient même très bien :)
 
Merci


---------------
I drive at 88mph ! Just in case...
n°2102764
breizhbugs
Posté le 21-09-2011 à 22:19:40  profilanswer
 

Moi je testerais si le fichier est ouvrable en écriture. Théoriquement si le programme qui le copie n'a pas fini, l'accès devrait être refusé si le fichier n'as pas été ouvert en FILE_SHARE_WRITE ( http://msdn.microsoft.com/en-us/li [...] 85%29.aspx - sais pas ce que ca donne en .net par contre, ni si c'est un comportement obligatoire/par défaut!) ?
(surtout qu'il y a moyen de désactivé la mise à jour des informations d'accès au fichier sur du ntfs pour "plus de rapidité", c'est un tweak assez connu: http://www.pctools.com/guides/registry/detail/50/ )
edit je sais plus combien: en  win api 32 je pense que tu connais cette fonction http://msdn.microsoft.com/en-us/li [...] 85%29.aspx , je ne sais pas si elle a un équivalent .net!)


Message édité par breizhbugs le 21-09-2011 à 22:29:20

---------------
Seul Google le sait...
n°2102797
deliriumtr​emens
sic transit intestinal...
Posté le 22-09-2011 à 08:59:08  profilanswer
 

Code :
  1. void copy(string path) {
  2. var isFree = false;
  3. try {
  4.   //on essaie de l'ouvrir
  5.   using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate)) {
  6.       //on teste si on peut le lire ou l'écrire
  7.       isFree = fs.CanRead // or
  8.       isFree = fs.CanWrite
  9.       }
  10.     }
  11.   catch (IOException ex) {
  12.      <bla bla bla, le fichier n'est pas accessible>
  13.       }
  14. if (!isFree) return;
  15. //sinon c'est bon, on copie
  16. }

Message cité 1 fois
Message édité par deliriumtremens le 22-09-2011 à 09:02:42
n°2102806
chapi
Downgradé
Posté le 22-09-2011 à 09:48:25  profilanswer
 

deliriumtremens a écrit :

Code :
  1. void copy(string path) {
  2. var isFree = false;
  3. try {
  4.   //on essaie de l'ouvrir
  5.   using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate)) {
  6.       //on teste si on peut le lire ou l'écrire
  7.       isFree = fs.CanRead // or
  8.       isFree = fs.CanWrite
  9.       }
  10.     }
  11.   catch (IOException ex) {
  12.      <bla bla bla, le fichier n'est pas accessible>
  13.       }
  14. if (!isFree) return;
  15. //sinon c'est bon, on copie
  16. }




Merci beaucoup, marche très bien cela :)


---------------
I drive at 88mph ! Just in case...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Savoir si un .zip est en cours d'écriture

 

Sujets relatifs
Spécial pack-->telecharger des cours complets de: C,C++,JAVA,GTK,LinuxCours particuliers de programmation Java
Cours de C "minimaliste en lignes, riche en résultats"Création / Ecriture dans un fichier [RESOLU]
cours C++ concis ?Comment savoir si mon hébergement est trop lent ou pas ?
Accéder à des fichiers en écritureProblème ecriture/lecture carte SD
installation d'un wordpress sur une base en cours d'utilisationEcriture automatique
Plus de sujets relatifs à : Savoir si un .zip est en cours d'écriture


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR