String & Tstring

Résolu
bidulchouette Messages postés 10 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 1 juin 2007 - 9 janv. 2007 à 21:40
bidulchouette Messages postés 10 Date d'inscription mardi 9 janvier 2007 Statut Membre Derniè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 !

6 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 janv. 2007 à 22:20
Salut,

c'est normal tu as pris la mauvaise propriété de l'OpenDialog
CopyFile(pchar(ExtractFilePath (OD_Fich.FileName)) ,pchar(char(i)+'\Test'),true);

 
@+
Cirec

<hr size="2" />
3
bidulchouette Messages postés 10 Date d'inscription mardi 9 janvier 2007 Statut Membre Derniè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 !
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
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));

  CopyFile(PChar(OD.Files[IdxFile]), Dest, True);
end;

"Dest" étant ton répertoire de destination.

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.



Mais comme cette fonction est très bien documentée par M$, je te laisse découvrir son aide ici :
-http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shfileoperation.asp
-http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp

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.

Mais si tu bloques encore, n'hésites surtout pas.
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
10 janv. 2007 à 07:43
Petite correction:

Après le deuxième code, "Dest" est le fichier (et pas répertoire) de destination.

Désolé pour la boulette ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 janv. 2007 à 13:12
Regarde ceci :
http://www.codyx.org/snippet_copier-fichier_267.aspx

cherche le code pour Delphi par F0xi (en fin de page)

 
@+
Cirec

<hr size="2" />
0
bidulchouette Messages postés 10 Date d'inscription mardi 9 janvier 2007 Statut Membre Derniè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 !!!
0
Rejoignez-nous