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 :

Copie de fichier vers un repertoire [WD15]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    developpeur
    Inscrit en
    Mai 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : developpeur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 77
    Par défaut Copie de fichier vers un repertoire
    Bonjour,


    je suis entrain de créer un code dans lequel, je veux, faire une copie de fichier vers un répertoire avec incrémentation du nouveau fichier à créer si ce fichier existe déjà. ce n'est pas difficile de creer un fichier différent, mais je veux utiliser une boucle afin d'alyser si le fichier en cours de création existe déjà, passer à l'incrémentation suivante, jusqu'au nom de fichier à retenir.

    Le problème est que je force d'utiliser une boucle dans un SI...Fin et je ne sais pas si c'est faisable aussi facilement. le " ALORS" me reclame un si de FIn que je n'arrive pas à bien positionner.

    je veux créer des fichier comme, client1, client2, client3, client4, avec copie incrémentée automatique sans passer par la boîte de dialogue de cofirmation d'écrasement.

    Si quelqu'un à une idée plus simple , il est la bienvenue.

    merci.

    voici le code:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    res est un booléen
    gsRep2 = SC_SelecteurRépertoire
    Fich1 = SC_SelecteurFichier
    fic est une chaîne = ExtraitChaîne(Fich1,1,"\",DepuisFin)
    Nom est une chaîne = ExtraitChaîne(fic,1,".",DepuisDébut)
    sExtension est une chaîne = ExtraitChaîne(fic,1,".",DepuisFin)
    Incrémente est un entier = 0
    Trace(fic)
    Trace(Nom)
    Trace(sExtension)
    nIndice est un entier = 1
    
    // vérifier si le fichier existe déjà dans le fichier de destination
     // créer une boucle qui test l'existence du fichier crée si vrai , créer un autre fichier +1 et supprimer l'ancien. ( BOUCLE,  et sortir avec tantque fichier existe = faux) 
    
    SI  fFichierExiste(gsRep2+"\"+fic) = Vrai  ALORS   // incrémente de  1	
     BOUCLE
     Incrémente++
     nIndice = Incrémente 
    // res= fCopieFichier(Fich1,gsRep2+"\" + Nom+nIndice +"."+ sExtension, frJauge)
     // creer le prochain fichier à vérifier tout tant le supprimant avant.
     fic= Nom + nIndice + "."+ sExtension   // test l'existence de ce dernier, si vrai, le supprime et créer un autre + 1 dans une boucle
    
    res =  fFichierExiste(gsRep2+"\"+fic)  // incrémente de  1
     TANTQUE   res = -1 // fFichierExiste(gsRep2+"\"+fic) = Faux
    SORTIR	 	
      res= fCopieFichier(Fich1, gsRep2 + "\"+ fic,frJauge) 
      FIN
     SINON   // copie le fichier sous le même nom dans le repertoire
        res= fCopieFichier(Fich1,gsRep2,frJauge)	
        FIN 
     FIN

  2. #2
    Membre chevronné
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 256
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    gsRep2 = SC_SelecteurRépertoire
    Fich1 = SC_SelecteurFichier
    fic est une chaîne = ExtraitChaîne(Fich1,1,"\",DepuisFin)
    Nom est une chaîne = ExtraitChaîne(fic,1,".",DepuisDébut)
    sExtension est une chaîne = ExtraitChaîne(fic,1,".",DepuisFin)
    Incrémente est un entier = 0
     
    TANTQUE fFichierExiste(gsRep2+"\"+fic) ALORS // incrémente de 1 
      Incrémente++
      fic= Nom + Incrémente + "."+ sExtension
    FIN
    res= fCopieFichier(Fich1,gsRep2+"\" + fic, frJauge)
    // etc...
    Dans votre boucle TANTQUE, l'instruction après le SORTIR ne s'executera jamais.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Par défaut
    Bonjour,

    comme il y avait des erreurs un peu partout, je te propose une solution :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    res est un booléen
    gsRep2 = SC_SelecteurRépertoire
    Fich1 = SC_SelecteurFichier
    fic est une chaîne = ExtraitChaîne(Fich1,1,"\",DepuisFin)
    Nom est une chaîne = ExtraitChaîne(fic,1,".",DepuisDébut)
    sExtension est une chaîne = ExtraitChaîne(fic,1,".",DepuisFin)
     
    Trace(fic)
    Trace(Nom)
    Trace(sExtension)
     
    nIndice est un entier = 1
     
    TANTQUE fFichierExiste(gsRep2+"\"+fic)
    	fic= Nom + NumeriqueVersChaine(nIndice,"05d") + "."+ sExtension
    	nIndice += 1
    FIN
     
    SI fCopieFichier(Fich1, gsRep2 + "\"+ fic,frJauge) ALORS
       Info("Copie effectuée !")
    SINON
       Erreur("Y a un pépin !",ErreurInfo())
    FIN
    Notes que dans le nom du fichier, tu pourrais avoir des "." donc il vaut mieux utiliser utiliser une autre façon d'extraire cette partie là ...

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom est une chaîne = Gauche(fic, Taille(fic) - (1+Taille(sExtension)))
    De plus, je préfère formater les indices de fichiers sur plusieurs chiffres car pour la lecture dans le répertoire, lorsque tu as plusieurs milliers de fichiers, c'est plus facile.

    Je pense que par défaut le premier fichier devrait porter l'indice 00001 mais ce n'est que mon avis !

    à bientôt,

    Nicolas

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Par défaut
    Bonjour,
    Pour récupérer le nom, l'extension et le chemin de votre fichier, je vous conseil d'utiliser la fonction fExtraitChemin() :

    sNomFichier est une chaine = fExtraitChemin("Chemin_Complet_du_Fichier",fFichier)
    sExtention est une chaine = fExtraitChemin("Chemin_Complet_du_Fichier",fExtension)
    sCheminFichier est une chaine = fExtraitChemin("Chemin_Complet_du_Fichier",fDisque+fRépertoire)

    Sinon la solution de Nicolas_Jeanneau me parait claire et optimale.

    Bon courage.

  5. #5
    Membre actif
    Homme Profil pro
    developpeur
    Inscrit en
    Mai 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : developpeur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 77
    Par défaut Resolu
    Bonjour, je vous remercie tous pour l'intérêt que vous portez à nos préoccupations,

    par rapport à mon problème, et suite à vos observations j'ai rectifié certaines erreur : d'abord pas besoins de créer la variable indice

    2- la proposition de SevenSoftware marche très bien ça me permet de créer des fichiers incrémentés , client, client0, client1, client2, clientn ...etc

    Je me pose une question, n'a ton pas besoins d'une condition de sortie de cette boucle tantque. J'ai introduit une condition de sortie et ça marche toujours.

    Mais quand j'éssai avec l'instruction " BOUCLE", ça ne marche pas, mais je l'ai oublié.

    code qui marche :

    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
    16
    17
    18
    19
    res est un booléen
    gsRep2 = SC_SelecteurRépertoire
    Fich1 = SC_SelecteurFichier
    fic est une chaîne = ExtraitChaîne(Fich1,1,"\",DepuisFin)
    Nom est une chaîne = ExtraitChaîne(fic,1,".",DepuisDébut)
    sExtension est une chaîne = ExtraitChaîne(fic,1,".",DepuisFin)
    Incrémente est un entier = 0
    nIndice est un entier = 1
    // vérifier si le fichier existe déjà dans le fichier de destination
     // créer une boucle qui test l'existence du fichier crée et et chaque qu'il existe, créer uun autre fichier +1 et supprimer l'ancien. ( BOUCLE,  et sortir avec tantque ffichier existe = faux) 
    TANTQUE  fFichierExiste(gsRep2+"\"+fic) = Vrai  // incrémente de  1	
    Incrémente++
    nIndice = Incrémente //    
    // creer le prochain fichier  .
    fic= Nom + nIndice + "."+ sExtension   // pas besoin de créer indice, donc remplacable par "incrémente"   
    SI fFichierExiste(gsRep2+"\"+fic) = Faux ALORS SORTIR  
    FIN
    //  si non copier le fichier sous nom d'origine	 	
    res= fCopieFichier(Fich1, gsRep2 + "\"+ fic, frJauge)

    code planté : // dans ce cas, j'ai essayé avec une boucle de type "BOUCLE"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // vérifier si le fichier existe déjà dans le fichier de destination
    // créer une boucle qui test l'existence du fichier crée et et chaque qu'il existe, créer uun autre fichier +1 et supprimer l'ancien. ( BOUCLE,  et sortir avec tantque ffichier existe = faux) 
    BOUCLE 
    res= fFichierExiste(gsRep2+"\"+fic) = Vrai  // incrémente de  1
    Incrémente++
    nIndice = Incrémente //    
    // creer le prochain fichier  .
    fic= Nom + Incrémente + "."+ sExtension   
    SI fFichierExiste(gsRep2+"\"+fic) = Faux ALORS SORTIR	
    FIN
    //  si non copier le fichier sous nom d'origine	 	
    res= fCopieFichier(Fich1, gsRep2 + "\"+ fic, frJauge)
    3 - Pour la proposition de Nicolas Janneau,

    -le premier fichier se crée facilement du genre client0001, mais pour la senconde copie, il ya plantage. d'où vient le problème ???

    Merci, pour le rappel des nom de fichier contenant des "."

    code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TANTQUE  fFichierExiste(gsRep2+"\"+fic) 
     
    // creer le prochain fichier à vérifier tout tant le supprimant avant.	
    fic= Nom +  NumériqueVersChaîne(nIndice,"05d") + "."+ sExtension   
    Incrémente++ 	
    FIN
     
    SI fCopieFichier(Fich1 ,gsRep2+"\"+fic,frJauge) = Vrai   // incrémente de  1 ALORS
    Info("le fichier " + " " + Fich1 + " " + " a été copié sous le nom de " + " " + fic )	
    SINON 
    Info(" Erreur le fichier " + " "+ Fich1 + " " + " n ' a pas été copié" + ErreurInfo())	
    FIN
    a plus

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Par défaut
    c'est juste que tu augmentes Incremente au lieu de nindice ....

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Par défaut
    La condition de sortie du TANTQUE est ce qui suit TANTQUE. Exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ResultatDuTest = Test
    TANTQUE ResultatDuTest = vrai
        ResultatDuTest = NouveauTest
    FIN
    La boucle tourne jusqu'à ce que NouveauTest rendre un résultat faux !
    Attention donc à faire en sorte que cela arrive à un moment ou à un autre ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copie de fichier vers disques en réseau
    Par maboulette dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/01/2008, 14h45
  2. Copie de fichiers vers PPC
    Par rhani-sama dans le forum Framework .NET
    Réponses: 1
    Dernier message: 13/12/2007, 15h20
  3. [batch] deplacer n-1 fichiers vers un repertoire
    Par liloo974 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 10/11/2007, 10h00
  4. Copie de fichier vers dossier
    Par crashyear dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2007, 21h09
  5. class qui copie un fichier vers un dossier...
    Par dimitrimm972 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 06/04/2006, 22h21

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