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

 Delphi Discussion :

Copier des fichiers


Sujet :

Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut Copier des fichiers
    Bonjour à tous,

    Me voilà bien embêtée pour la copie de plusieurs fichiers... Après de longues recherches, je sais que la fonction permettant de copier un seul fichier est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CopyFile('C:\Parameters\TEXTE.EXE','C:\c\TEXTE.EXE',true);
    J'ai de même un bout de code qui permet de copier dossier par dossier avec les fichiers qui compose le dossier:

    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
     
    function CopyFolder(FromFld, ToFld: string): boolean;
    var fos: TSHFileopStruct; 
    begin 
      //  Suppression des '\' de fin
      FromFld := ExcludeTrailingPathDelimiter(Trim(FromFld));
      ToFld := ExcludeTrailingPathDelimiter(Trim(ToFld)); 
     
      FillChar(fos, SizeOf(fos),0);
      with fos do 
        begin
          wFunc := FO_COPY;
          pFrom := PChar(FromFld+#0);
          pTo   := PChar(ToFld+#0);
          fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
        end;
      Result := ShFileOperation(fos)=0;
    end;
    Mais je souhaite copier plusieurs fichiers d'un dossier vers un autre dossier... J'ai entendu parlé de ShFileOperation mais je ne connais pas du tout... Est-ce que quelqu'un peut m'orienter svp ?

    D'avance merci =D

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    Quel est le problème ?
    Si tu veux copier plusieurs fichiers, utilise CopyFile en boucle !
    Sinon, ShFileOperation permet de le faire en une fois effectivement, lit le descriptif MSDN et le tutoriel de nono40, surtout la fonction ConcatTStrings qui est la clé pour écrire dans le tableau de chaine pFrom
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Merci pour tes liens, je vais étudier ça. Disons que mon "problème" est que je souhaite un genre de code tel que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyFile('C:\Parameters\*.*','C:\c\',true);

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    Je pense que le code actuel de CopyFolder permet déjà de le faire non ?


    ajouter un éventuel FOF_NORECURSION
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Exactement, le code actuel de CopyFolder permet déjà de le faire mais il permettait de copier de dossier vers dossier. Or je souhaitais copier tous les fichiers d'un dossier vers un autre dossier...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Procedure CopyFiles(From, Dest:String);
    var
      F : TShFileOpStruct;
    begin
      F.Wnd := 0;
      F.wFunc := FO_COPY;
      F.pFrom := PCHAR(From);
      F.pTo := PCHAR(Dest);
      F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
      // Si le dossier est manquant --> Message d'erreur
      if ShFileOperation(F) <> 0 then MessageDlg('Dossier Parameters manquant', mtError ,[mbOk], 0);
    end;
    J'appelle ma procédure par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyFiles('C:\Parameters\*.*','C:\c\');
    Qu'en penses-tu ?

  6. #6
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut


    quelle version de dephi ?

    si XE+, tu as les fonctions de l'unité IOUtils pour le faire simplement
    TDirectory.Copy( CheminSource, CheminDestination);

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Salut,

    La version XE+, c'est Delphi 2011 ? Malheureusement, la version est Delphi6.

  8. #8
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 519
    Billets dans le blog
    10
    Par défaut
    tu peux aussi utiliser la fonction xcopy en lançant une commande dos

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    Citation Envoyé par ptitemeuh Voir le message
    Qu'en penses-tu ?
    Je n'en pense pas grand chose, testes le par toi même, tu verras bien ce que cela fait, à un moment, il faut se lancer !

    il te manque les fin de tableau dans pFrom et pTo, très important !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure CopyFiles(From, Dest:String);
    var
      F : TShFileOpStruct;
    begin
      ZeroMemory(@F, sizeof(F));
      F.wFunc := FO_COPY;
      F.pFrom := PCHAR(From + #0);
      F.pTo := PCHAR(Dest + #0);
      F.fFlags := FOF_FILESONLY or FOF_SIMPLEPROGRESS or FOF_RENAMEONCOLLISION;
     
      ForceDirectories(Dest);
      if ShFileOperation(F) <> 0 then MessageDlg('Dossier Parameters manquant', mtError ,[mbOk], 0);
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/11/2006, 21h06
  2. Utiliser mon tableau pour copier des fichiers
    Par Paloma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 31/10/2006, 18h38
  3. Copier des fichiers d'une machine à une autre
    Par Empty_body dans le forum Réseau
    Réponses: 3
    Dernier message: 29/10/2006, 12h44
  4. copier des fichiers
    Par Daeron dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/11/2004, 14h45
  5. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 07h55

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