IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

fCopieFichier + filtre


Sujet :

WinDev

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut fCopieFichier + filtre
    Bonjour,

    J'ai bien vu l'ensemble des fonctions fXXX http://doc.pcsoft.fr/fr-FR/?3036034
    Je n'ai rien trouvé non plus sur la toile pour faire une copie d'un dossier (sous-dossiers + fichiers) avec la notion de filtre !

    Auriez-vous un exemple / une méthode / une fonction pour lancer une copie de dossiers/fichiers avec le filtrage suivant : *..INK, *\AppData\*, *\desktop.ini ?

    Un grand merci par avance...

  2. #2
    Membre habitué Avatar de Toytoy31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2010
    Messages : 74
    Points : 183
    Points
    183
    Par défaut
    Bonjour,

    Que souhaites-tu faire exactement ?

    Car dans ce que je vois, tu souhaites copier des fichiers qui se trouve sur un répertoire USER d'un poste sous Microsoft, c'est bien cela ?

    Auriez-vous un exemple / une méthode / une fonction pour lancer une copie de dossiers/fichiers avec le filtrage suivant : *..INK, *\AppData\*, *\desktop.ini ?
    si tu as un bout de code qui traine ou autre, montre le nous s'il te plait

    Cordialement
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag

    Bonne continuation et bon dev surtout

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    En version 19, il est possible de préciser une procédure en paramètre à fCopieFichier et fRepCopie (voir les pages d'aide : http://doc.pcsoft.fr/fr-FR/?3036004, http://doc.pcsoft.fr/fr-FR/?3036041).
    Cette procédure est appelée pour chaque fichier qui doit être copié.
    Il suffit de renvoyer fcIgnore pour que le fichier ne soit pas copié et fcCopie pour que le fichier soit effectivement copié.

    Petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PROCEDURE AnalyseFichierACopier(CheminFichierSource, CheminFichierDestination)
     
    // Filtre
    SI CheminFichierSource =] "\desktop.ini" alors renvoyer fcIgnore
    ...
     
    // Par défaut, copie !
    RENVOYER fcCopie

    Cordialement

  4. #4
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Bonjour à tous,

    Toytoy31
    Je souhaite faire un backup des données d'une session Windows

    djejackk
    Oulala... ok du coup cela parait possible mais super lourd ! notamment parce qu'il faut filtrer les répertoires ET les dossiers...
    Je vais essayer malgré tout.
    Merci !

  5. #5
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Bonjour,

    voici un début de code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sDossierSource est une chaîne = "C:\Documents and Settings\Arnaud"
    sDossierDestination est une chaîne = "\\NAS\Public\BackupWD"
     
    SI fRepCopie(sDossierSource, sDossierDestination, pCopieFiltre, frRécursif) ALORS
    	Info("Copie effectuée avec succès !")
    SINON
    	Erreur("Une erreur est survenue lors de la copie.....", ErreurInfo(errMessage))
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PROCEDURE pCopieFiltre(CheminFichierSource, CheminFichierDestination)
     
    SI CheminFichierSource =] "\desktop.ini" ALORS	RENVOYER fcIgnore
    SI CheminFichierSource =] "\NTUSER.DAT" ALORS RENVOYER fcIgnore
    SI CheminFichierSource =] "\ntuser.dat.LOG" ALORS RENVOYER fcIgnore
    SI CheminFichierSource =] "\ntuser.ini" ALORS RENVOYER fcIgnore
     
    SI ChaîneFinitPar(CheminFichierSource, "\Application Data") ALORS
    	RENVOYER fcIgnore
    FIN
    SI ChaîneFinitPar(CheminFichierSource, "\Local Settings") ALORS
    	RENVOYER fcIgnore
    FIN
     
    RENVOYER fcCopie
    La récursivité ne fonctionne pas malgré frRécursif
    donc je ne peux pas tester "\Application Data"

    Quel est le problème ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonsoir,

    Il manque un paramètre lors de l'appel à fRepCopie d'après la syntaxe de la page d'aide : entre la procédure et la constante frRécursif, la procédure attend un pointeur (qui sera passé en paramètre à la procédure appelée).
    Penser à renseigner un pointeur (une variable de type entier) même si vous ne l'utilisez pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sDossierSource est une chaîne = "C:\Documents and Settings\Arnaud"
    sDossierDestination est une chaîne = "\\NAS\Public\BackupWD"
    nPointeur est un entier
    
    SI fRepCopie(sDossierSource, sDossierDestination, pCopieFiltre, nPointeur, frRécursif) ALORS
    	Info("Copie effectuée avec succès !")
    SINON
    	Erreur("Une erreur est survenue lors de la copie...", ErreurInfo(errMessage))
    FIN
    Je pense que le problème vient de là.

    Tenez nous au courant !

    Cordialement

  7. #7
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut répertoires vides
    Bonjour djejackk

    Effectivement le pointeur était manquant ! Le problème est presque résolu...
    Je constate que les répertoires ne sont pas filtrés.

    Avec le test suivant seuls les fichiers sont ignorés, ce qui me donne une multitude de répertoires vides !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI (CheminFichierSource [=] "\Application Data\") OU (CheminFichierSource [=] "\Local Settings\") ALORS
    	RENVOYER fcIgnore
    FIN
    Comment filtrer la copie des répertoires "\Application Data\" et "\Local Settings\" ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    A première vue, ça ressemble à un "bug"/"comportement bizarre" : fRepCopie semble créer le répertoire destination avant de lancer la procédure sur chaque fichier qu'il contient : donc même si tout est ignoré par la procédure, le répertoire est créé (et donc jamais rempli).
    Je vous conseille de remonter ça au Support Technique (avec un petit projet qui va bien) !!

    Pour vous dépanner, vous pouvez faire une suppression du répertoire avant de renvoyer fcIgnore. Ca semble fonctionner ...
    EDIT : mieux de vérifier l'existence du répertoire avant de le supprimer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI (CheminFichierSource [=] "\Application Data\") OU (CheminFichierSource [=] "\Local Settings\") ALORS
    	// Force la suppression du répertoire destination qui a été créé (seulement s'il existe)
    	SI fRépertoireExiste(fExtraitChemin(sDestination,fDisque+fRépertoire)) ALORS fRepSupprime(fExtraitChemin(CheminFichierDestination,fDisque+fRépertoire))
    	RENVOYER fcIgnore
    FIN

    Cordialement

  9. #9
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Merci pour ton message djejackk.

    Après réflexion, je vais très certainement utiliser une autre méthode. En effet, je dois principalement mettre en place un système de synchronisation de fichiers/dossiers de type "miroir" donc avec suppression des fichiers/dossiers dans la destination lorsqu'ils ne sont plus présent dans la source, et bien évidemment ne pas recopier (avec écrasements) les fichiers identiques des 2 cotés...
    Dommage que winDev n'ai pas implémenté cette fonctionnalité !!!

    Pour ce qui est du Support Technique... je verrai cela plus tard.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonsoir
    Et l'exemple "WD Synchronisation de fichiers" ne vous aide pas ?

  11. #11
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Effectivement, l'exemple est intéressant !

    Il utilise une méthode consistant à lister tous les fichiers du dossier source, du dossier destination, compare les listes, copie ou supprime les différences (fichier par fichier)... c'est lourd à mettre en place mais ça a le mérite de fonctionner.

    Existe-t-il un moyen de demander cette évolution à PC SOFT ?

Discussions similaires

  1. Algorithme d'un filtre ?
    Par Vince78 dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 04/09/2002, 15h54
  2. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 22h32
  3. TADOTable et filtre
    Par GaL dans le forum C++Builder
    Réponses: 16
    Dernier message: 02/07/2002, 16h52
  4. Filtre passe Bande
    Par Mau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/06/2002, 17h03
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo