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 :

Pourquoi CopyFile ne fonctionne pas !


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Pourquoi CopyFile ne fonctionne pas !
    Bonjour,

    Les quelques lignes de code suivantes ne fonctionnent pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure CopieFichiers;
    var
      FileName,WorkName: String;
    Begin
      FileName:=Form1.IMGPath+'\'+Form1.Edit1.Text;
      if ExtractFileExt(FileName)='.JPG' then
      begin
        WorkName:= 'C:\TEMP\'+Form1.Edit1.Text;
        CopyFile(pchar(FileName),pchar(WorkName),True);
        Form1.DisplayImage(WorkName);
      end;
    End;
    J'ai vérifié au pas à pas FileName et WorkName sont correctement initialisés et le fichier image se trouve bien dans le chemin de FileName mais à l'appel de DispayImage il n'existe pas de fichier image dans le chemin de WorkName

    Comment effectuer une copie correcte ?

  2. #2
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    1 - UpperCase(ExtractFileExt(FileName)) = '.JPG'

    2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        if CopyFile(pchar(FileName),pchar(WorkName),True)
        then
            Caption := 'ok'
        else
            Caption := 'nok' ;
    et si tu essais en dur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyFile('c:\test.txt','c:\temp\text.txt',True);
    Ca fait la même chose ?
    Sinon met un point d'arrêt sur CopyFile et vérifie les valeurs de FileName et WorkName.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Vérif
    En dur celà fonctionne !
    J'ai effectué un point d'arrêt sur CopyFile et vérifié les valeurs de FileName et WorkName : Elles sont bonnes !!!
    Par contre j'ai modifié le code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      if UpperCase(ExtractFileExt(FileName))='.JPG' then
      begin
        WorkName:= 'C:\TEMP\'+Form1.Edit1.Text;
        if CopyFile(pchar(FileName),pchar(WorkName),True) then  Form1.DisplayImage(WorkName);
      end;
    La fonction DisplayImage n'est pas appellée ce qui signifie que la copie ne s'est pas passée !

    Pourquoi ???

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 937
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 937
    Points : 15 388
    Points
    15 388
    Par défaut
    Citation Envoyé par colorid Voir le message
    à l'appel de DispayImage il n'existe pas de fichier image dans le chemin de WorkName
    Et après ? Ce fichier image est-il bien copié en fin de procédure ?

    Peut-être avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        CopyFile(pchar(FileName),pchar(WorkName),True);
        Application.ProcessMessages; // ? -- à tenter
        Form1.DisplayImage(WorkName);
    Tu pourrais essayer d'en savoir plus avec
    If the function succeeds, the return value is nonzero.
    If the function fails, the return value is zero. To get extended error information, call GetLastError.
    Valà,
    --
    jp

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut GetLastError = 6
    Où trouve-t'on la signification de l'erreur ?
    J'ai juste utilisé err:=GetLasError immédiatement après la fonction CopyFile
    Err = 6

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut J'ai trouvé !!!
    Dans l'aide de CodeGear j'ai cherché la signification de l'erreur. Je ne l'ai pas trouvée mais j'ai tiqué sur la description que donne CodeGear :
    object.CopyFile ( source, destination[, overwrite] )
    Dans mon cas l'image copiée n'existe pas dans le répertoire cible il n'y a donc pas lieu de demander un overwrite j'ai donc écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if CopyFile(pchar(FileName),pchar(WorkName),false) then Form1.DisplayImage(WorkName);
    et ça marche !!!

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 937
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 937
    Points : 15 388
    Points
    15 388
    Par défaut
    Citation Envoyé par colorid Voir le message
    Dans mon cas l'image copiée n'existe pas dans le répertoire cible il n'y a donc pas lieu de demander un overwrite
    ? ? ?
    D'après le SDK,
    bFailIfExists
    [in] If this parameter is TRUE and the new file specified by lpNewFileName already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.
    Ce qui m'épate, c'est, toujours du SDK,
    If the function succeeds, the return value is nonzero.
    Et toi tu nous dis que ça foire avec 6 en retour... J'comprends pas, là, à moins que CodeGear ait encapsulé l'appel à l'API, en inversant la valeur de retour ?

    --
    jp

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut
    N'empêche que ça marche !

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

Discussions similaires

  1. [GD] Pourquoi imagecreatefromjpeg ne fonctionne pas ?
    Par Woodgate dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 06/05/2008, 23h58
  2. pourquoi Form_BeforeUpdate ne fonctionne pas
    Par nima5 dans le forum IHM
    Réponses: 6
    Dernier message: 09/01/2008, 00h06
  3. Pourquoi CopyFile plante et pas SHFileOperation
    Par alainpeniche dans le forum Windows
    Réponses: 3
    Dernier message: 25/09/2007, 14h03
  4. Pourquoi somme() ne fonctionne pas ?
    Par pyxosledisciple dans le forum Access
    Réponses: 14
    Dernier message: 22/03/2006, 15h18
  5. Pourquoi AUTO_INCREMENT ne fonctionne pas ?
    Par Death83 dans le forum SQLite
    Réponses: 1
    Dernier message: 10/10/2005, 11h05

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