CopyFolder

Résolu
vico8000
Messages postés
287
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
- 29 juin 2016 à 11:45
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
- 17 août 2016 à 16:01
Bonjour,

J'ai créé une FUNCTION me permettant de copier l'intégralité de mes fichiers présents dans un dossier et d'en faire une copie dans un autre fichier.
Ma question est la suivante :
- Je ne sais pas comment faire pour ne pas sélectionner les fichiers qui ne m’intéressent pas. (Fichiers volumineux qui n'auront pas d’intérêt dans la suite de mon application mais qui sont présents dans le dossier et qui ralentissent l'exécution du CopyFolder)

Voici le code que j'ai actuellement, et qui marche très bien.

//Copie de fichiers
FUNCTION CopyFolder(FromFld, ToFld: string): boolean;
VAR
fos: TSHFileopStruct;

BEGIN
// il faut supprimer les antislashs de fin sinon vous aurez droit à un message d'erreur
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;

PROCEDURE Traitement.RecuperationDossier;
BEGIN
CopyFolder('\\Sertf1b\c\DatasBA', 'C:\Users\Administrateur\Desktop\Test');
END;


Je suis ouvert à toute proposition, même si je dois changer ma fonction.

Cordialement.
A voir également:

5 réponses

Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
23 juil. 2016 à 15:27
oh là ...
pas la peine de faire une usine à gaz

comme je l'ai déjà dit plus haut, tu as tout ce qu'il te faut et l'utilisation du code de f0xi est juste pour simplifier encore un peu plus.

***sur une Fiche: 2 TEdit (edt_From & edt_To) 1 TButton (btn_Copy)

  ... 
implementation

{$R *.dfm}
uses
  ExtFileOp;

procedure TUDemoMain.btn_CopyClick(Sender: TObject);
var
  aSL: TStringList;
begin
  aSL := TStringList.Create;
  try
    aSL.Delimiter := ';';
    aSL.DelimitedText := edt_From.Text;
    FastCopy(Self, aSL, edt_To.Text);
  finally
    aSL.Free;
  end;
end;



lance l'application.
dans edt_From tu mets: (par Ex.)
"C:\Program Files\Mon dossier\d*.*";"C:\Program Files\Mon dossier\c*.*"

et dans edt_To:
c:\TempCopy\d\


et appuyer sur le bouton ... ceci copiera tous les fichiers commençant par D et par C dans c:\TempCopy\d\

surtout ne pas oublier les guillemets et le point-virgule entre chaque mask de recherche dans edt_From


voilà rien de plus ... rien de moins ^^
1
vico8000
Messages postés
287
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
2
26 juil. 2016 à 10:33
Salut,

Effectivement, ta solution marche impeccable, est également bien plus rapide. (Du au nombre de traitement.) Je te remercie donc d'avoir rebondis ^^.

Une réponse amène une autre question (C'est l'inverse normalement mais bon) La barre des tâches qui charge pendant le traitement ne me dérange pas tant que ça au final, j'allais regardé pour faire une progressBar donc ... Impeccable.

La question est, est il possible de mettre par défaut "OUI" à la question qui demande s'il faut écrasé les dossiers existants portant le même nom ??

Encore merci pour la petite astuce qui me fait gagner la bagatelle de 5 bonnes minutes par traitement.

Cordialement.
0
vico8000
Messages postés
287
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
2 > vico8000
Messages postés
287
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018

26 juil. 2016 à 10:48
Je confirme, ton morceau de code marche de façon impeccable.
Le traitement dure difficilement plus de 15sec pour 6mins minimum avant.

Merci bien :)
0