ExtFileOp (composant de F0xi) [Résolu]

EricStib 13 Messages postés vendredi 23 février 2007Date d'inscription 26 avril 2007 Dernière intervention - 4 avril 2007 à 11:21 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 5 avril 2007 à 21:29
Bonjour à tous,

J'essaie d'utiliser le composant ExtFileOp de F0xi pour copier des fichiers mais sans passer par une boite de dialogue.
Cela fonctionne bien dans un répertoire où il n'y a QUE des fichiers mais si il s'agit d'un répertoire contenant des sous-répertoires, j'obtiens un message d'erreur et rien n'est copier.
Je me doute bien que c'est dans mon code que ce situe le problème mais je me plante lamentablement depuis quelques jours sans voir la solution.
Peut-être que vous pourriez me donner la voie à suivre en analysant le code ci-dessous ?

procedure TFormPrincipale.p_CopierLesFichiers;
{copie des fichiers à l'aide du composant de f0xi (ExtFileOp1)}
var
   Status        : Integer;
   SearchRec     : TSearchRec;
   ListeFichiers : TStringList;
begin
    //on crée la liste
    ListeFichiers := TStringList.Create;
    //mise à blanc
    ListeFichiers.Clear;

    Status := FindFirst(dirSource + '*.*',faAnyFile,SearchRec);
    while Status = 0 do
       begin
         if (SearchRec.Attr and faDirectory) = 0 then
            //récupération des fichiers
            ListeFichiers.Add(SearchRec.Name);

            status := Findnext(SearchRec);
       end;

      with TFileOp.Create(Self) do
         try
            Files.Assign(ListeFichiers);
            Destination := dirDestJourHeure;
            FileOperation := fcCopy;
            Execute;
         finally
            Free;
         end;
end;

Merci,
EricStib
Afficher la suite 

5 réponses

Répondre au sujet
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 4 avril 2007 à 12:41
+3
Utile
tu peu deja corriger ça :

procedure TFormPrincipale.p_CopierLesFichiers;
var
   SR : TSearchRec;
begin
  with TFileOp.Create(Self) do
  try
    Files.BeginUpdate;
    Files.Clear;

    if FindFirst(dirSource + '*.*',faAnyFile, SR) = 0 then
       repeat  
         if ((SR.Attr and faDirectory) = 0) and
            ((SR.Name <> '.') and (SR.Name <> '..')) then
            Files.Add(dirSource+SR.Name);
       until Findnext(SR) <> 0;

    Files.EndUpdate;

    Destination   := dirDestJourHeure;
    FileOperation := fcCopy;
    Execute;
  finally
    Free;
  end;
end;

<hr size="2" width="100%" />Croc (click me)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 4 avril 2007 à 12:27
0
Utile
mmmm je regarderais ça en rentrant tout a l'heure, il est vrai que j'ai pas fait de demo pour montrer comment l'utiliser...

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi
EricStib 13 Messages postés vendredi 23 février 2007Date d'inscription 26 avril 2007 Dernière intervention - 5 avril 2007 à 02:27
0
Utile
Merci F0xi,

C'est déjà nettement mieux ! Au moins il copie le contenu d'un répertoire même quand il y a un autre dossier dedans... mais il ne copie que les fichiers et pas les sous-répertoires et le contenu de ceux-çi.

Je vais faire une liste des répertoires et sous-répertoires et je me servirai de cette liste pour modifier ma variable "source". A l'aide de CreateDir (ou ForceCreateDir), je vais créer les répertoires au fur et à mesure et copier leurs contenu. Je pense que cela devrait allez comme ça (?)

Je vais essayer ça et je posterai le code si cela marche.
Merci encore,
EricStib
Commenter la réponse de EricStib
EricStib 13 Messages postés vendredi 23 février 2007Date d'inscription 26 avril 2007 Dernière intervention - 5 avril 2007 à 02:40
0
Utile
Salut F0xi,

CA FONCTIONNE !! Ta modification à mon code pourri a décoincé mon programme :+)

J'ai fait comme écrit dans le message précédent et tout à l'air de fonctionner super bien.

Je met de l'ordre dans mon code, je teste encore pour être certain qu'il n'y a plus de bug's et je le posterai vendredi ou samedi.

Encore merci pour le composant, il est vraiment génial !!... il y a même un progressBar incorporé, ce qui manquait dans mon code :+)

Je te dis quoi dès que j'ai fini,
a+
EricStib
Commenter la réponse de EricStib
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 5 avril 2007 à 21:29
0
Utile
pas de probleme.

aussi, FileOp n'est pas pour le moment compatible multi-dest et ne permet pas la recurs des dossiers.

si tu doit copier par exemple :

.\mondossier1\fichier1.ext
.\mondossier1\dossier2\fichier2.ext

tu doit d'abord copier fichier1.ext

puis renouveler l'operation pour fichier2.ext en changeant la destination.

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.