bidulchouette
Messages postés10Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention 1 juin 2007
-
9 janv. 2007 à 21:40
bidulchouette
Messages postés10Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention 1 juin 2007
-
11 janv. 2007 à 01:57
Tout d'abord bonjour a tous, bonne année et meilleurs voeux!!!!
Voila je suis en trin de travailler sur une application qui permet la sauvegarde de fichier sur une clé USB. Malheureusement je rencontre quelque difficulté avec une ligne de code :
CopyFile(pchar(ExtractFilePath (OD_Fich.Files)) ,pchar(char(i)+'\Test'),true);
avec l'erreur suivante :
[Erreur] Unit1.pas(53): Types incompatibles : 'String' et 'TStrings'
A la base le but de cette ligne de code est de copier un fichier sélectionner par le biais d'un OD et de le coller dans un dossier Test situé sur ma clé USB (i étant la variable contenant la lettre qui identifie ma clé). Vous devez vous en doutez je narrive pa résoudre cette erreur car je ne sais pas comment rendre compatible un String et un Tstring.
Toute aide est la bienvenue et si quelqu'un pense avoir une solution complètement différente pour le transfert cela me va aussi ! Merci davance et bonne journée a vous !
bidulchouette
Messages postés10Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention 1 juin 2007 10 janv. 2007 à 03:17
Merci Cirec pour cette réponse très rapide ! Effectivement en utilisant ta solution l'erreur disparait.
Malheureusement quand j'execute mon application tout se déroule normalement (aucune erreurs) si ce n'est que la copie ne s'effectue pas (C'est quand même le but de cette appli !!!).
Je dois dire que c'est la première fois que je tente de faire une procédure de copie de fichier sous Delphi, mais je dois absolument arriver a finaliser ce prog, donc, si vous avez de la documentation qui détaille l'utilisation de la commande CopyFile ou que vous en connaissez une autre qui pourrait convenir (avec un petit exemple si possible !) je vous en serai grandement reconnaissant. merci d'avance et a bientôt !
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 10 janv. 2007 à 07:40
Salut,
En fait, je pense que tu avais deux problèmes:
- le choix de la propriété du OD
- les deux premièrs paramètres de la fonction CopyFile (fichiers source et dest)
Pour le premier, Cirec t'a donné la solution. Si tu as plusieurs fichiers à copier, tu dois passer par une boucle (obligé) pour copier chaque fichier séparément.
for IdxFile := 0 to OD.Files.Count - 1do CopyFile(PChar(OD.Files[IdxFile]), Dest, True);
Ensuite, il ne me semble pas que l'on puisse copier tout un répertoire en un coup (pas avec CopyFile en tout cas). Il est donx erroné de transmettre un répertoire comme fichier source. Il faudrait plutôt, comme je l'ai fait, transmettre directement le nom de fichier.
Pour le deuxième paramètre, je ne sais pas trop ce que représente ta variable "i" (surement un Integer) mais à mon avis, Delphi n'évalue pas l'expression "pchar(char(i)+'\Test')" comme tu le souhaiterais. Fait un MessageBoxA(...) pour voir ce que tu obtiens réelement avec cette ligne, pcq ça m'a l'air bancal (puisque le nom doit être un nouveau nom de fichier, pas un répertoire).
Dernière chose, si le répertoire de destination n'existe pas, le fichier n'est jamais copié. Il faut donc, avant chaque copie, faire un appel à ForceDirectories(), qui va se charger de créer les répertoires manquants.
En résumé :
for IdxFile : = 0to OD.Files.Count - 1do begin ForceDirectories(ExtractFilePath(Dest));
Avec tout ça, tu devrais t'en sortir.
A part ça, je pense que l'utilisation de la procédure SHFileOperation() pourrait être plus pratique dans ton cas (possibilité d'utiliser la fenetre de progression de windows, d'annuler, ...). Malheureusement poir toi, je ne vais pas te l'expliquer car elle permet tellemement de choses que ce serait perdre du temps pour pas beaucoup.
Fais juste bien attention pour les séparateurs de fichiers: #0 entre chaque fichier, #0#0 à la toute fin. Les "fFlags" se combienent en les additionnant (ou par un "or").
Il te faudra ShellAPI dans les uses.
bidulchouette
Messages postés10Date d'inscriptionmardi 9 janvier 2007StatutMembreDernière intervention 1 juin 2007 11 janv. 2007 à 01:57
Merci à vous pour toutes ces réponses. Grace à votre aide j'ai pu terminer mon appli et je vai enfin pouvoir l'utiliser. Merci a tous et bonne journée !!!