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

API, COM et SDKs Delphi Discussion :

ShFileOperation(Info) bug depuis quelques jours


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut ShFileOperation(Info) bug depuis quelques jours
    Bonjour,
    J’ai développé un programme de sauvegarde de fichiers modifiés depuis la dernière sauvegarde Acronis.
    Apres avoir établi la liste des fichiers, j’utilise ShFileOperation(Info) pour copier sur une clé USB.
    Depuis quelques jours il y a une erreur au début de la sauvegarde (rien n’est copié en fait).

    Je suis 8 Windows 8.1 64 bits.

    La partie copie, qui bug, utilise le « Programme de présentation de la fonction API ShFileOperation() » de Nono40 developpez source0019.zip”.
    Ce programme bug à l’identique. Le source est joint.
    J’ai recompilé ce programme (DELPHI starter XE). Sous 8.1 et sous Windows 7 64 bits après l’avoir re-téléchargé le problème subsiste.

    Le programme bug dans l’api pour certains noms de fichiers :
    Ligne 134
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result:=Not Boolean(ShFileOperation(Info)) And Not Info.fAnyOperationsAborted;
    ShFileOperation(Info) renvoie 0 pour un nom de fichier “court”(ok) et 124 pour un nom de fichier “long” (bug).

    Bug uniquement pour les noms de fichiers” longs – avec espace” exemple "C:\Users\Gabriel\Documents\Delphi\RADStudio\projets\DimoDelphiStarte\DIMODBC4.bdsproj.local"
    Par contre la copie est ok pour un nom de fichier court, exemple : "C:\AA\d7prog.hlp"

    N’ayant pas la compétence pour voir ce qui se passé dans l’API je fais appel à vous.
    PS: j’ai essayé à tout hasard (sans succès) d’encadrer le nom de fichier avec "".

    .
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    La source Nono40 date de plus de 10 ans, surement écrite pour Win2K (Win 5.0) ou WinXP (Win 5.1) avec Delphi 7 ANSI 32Bits

    Tu utilises Delphi XE (Unicode) et Win8.1 (Win 6.3), mais tu as de la chance, à la lecture du code de Nono40, on peut penser que l'utilisation du type string devrait fonctionner
    On peut écarter de problème

    Voir la documentation MSDN SHFileOperation function, cela indique tous les codes d'erreur
    124 c'est 7C en Hexa
    DE_INVALIDFILES 0x7C The path in the source or destination or both was invalid.
    As-tu plusieurs fichiers dans NomsTO ?
    Si oui, as-tu pensé à mettre l'options oFOF_MULTIDESTFILES ?

    As-tu prévu une gestion de collision sur la clé ?
    Est-ce que tu recréés une arborescence ou tu copie les fichiers tous au même endroit ?
    Si même endroit, il ne faut pas avoir plusieurs fichiers de même nom

    Dans ton exemple, de fichier en erreur, il n'y a pas d'espaces !
    D'où vient la TStrings ?
    Est une TStringList ou les Lines d'un TMemo
    Si TMemo, attention au WordWrap qui sur les espaces pourrait nuire au nom de chemin (peut-être que même sans espace, le WordWrap s'effectue si le nom est trop long)
    Utilise une TStringList c'est plus prudent !

    Je n'utilise cette fonction qu'avec des * pour copier un dossier complet !
    Si je connais la liste précise, j'utilise de simple CopyFile en parcourant la liste, c'est plus simple, et cela ne bug que sur un fichier pas sur tous
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut bug copie fichiers avec SHFILES
    Bonjour Shait,
    Si TMemo, attention au WordWrap qui sur les espaces pourrait nuire au nom de chemin (peut-être que même sans espace, le WordWrap s'effectue si le nom est trop long)
    Utilise une TStringList c'est plus prudent !
    Bingo ! c'était ça.
    Dans un premier temps j'ai disposé le memo des noms fichiers source et le memo nom des fichiers destination l'un au dessous l'autre, au lieu de cote à cote. Je les ai agrandis au maximum et ça remarche !
    Maintenant bien qu'il y ait de la marge pour des noms de fichiers tres longs, pour sécuriser afficher les scrollbars + wordwrap à False.
    Effectivement on peut stocker la source et la destination des fichiers dans des stringlist puis travailler avec celles-ci pour la copie.
    Je pense qu'il est quand meme interessant de conserver les Tmemo pour jeter un œil à ce qui est sauvegardé;
    et les remplir à partir des Tstringlist.

    La ou je suis surpris c'est que j'utilise ce programme depuis longtemps et que je n'avais jamais eu le probleme !!

    C'est vrai que quand Nono40 a publié ce programme de démonstration les noms de fichiers étaient beaucoup plus courts (8 caractères + 3 pour l'extension! c'est loin )

    Merci encore.

    Pour information, bien que ça ne présente que peu d'intérêt (puisque le problème est résolu) je répond aux autres questions que tu m'a posées :
    As-tu plusieurs fichiers dans NomsTO ?
    Oui

    Est-ce que tu recréés une arborescence
    Oui
    exemple :
    fichiers a sauvegarder :
    C:\Users\Gabriel\Documents\Delphi\RAD Studio\projets\SvdrdFicModif\SvdrdFicModifNew.exe
    C:\Users\Gabriel\Documents\Delphi\RAD Studio\projets\SvdrdFicModif\svgrdficmodif.ini

    Je sauvegarde sous :
    D:\svgrd01022014\DD_C\Users\Gabriel\Documents\Delphi\RAD Studio\projets\SvdrdFicModif\SvdrdFicModifNew.exe
    D:\svgrd01022014\DD_C\Users\Gabriel\Documents\Delphi\RAD Studio\projets\SvdrdFicModif\svgrdficmodif.ini

    D : lettre de la clé USB
    svgrd01022014 = sauvegarde acronis du 01022014
    DD_C\ indique que le fichier a pour origine le disque C :
    Ainsi j'ai toutes les infos pour restaurer si nécessaire.

    Dans ton exemple, de fichier en erreur, il n'y a pas d'espaces !
    Absolument mais ça bug des que le nom de fichier est "long" j'ai pas déterminé la longueur précise.

    Si oui, as-tu pensé à mettre l'options oFOF_MULTIDESTFILES ?
    Moi non j'ai fait un copier coller, mais Nono40 y avait pensé

    les codes d'erreur
    124 c'est 7C en Hexa
    DE_INVALIDFILES 0x7C
    The path in the source or destination or both was invalid.
    Merci d'avoir cherché, ça confirme ce que j'ai constaté : ça matche avec certains fichiers pas avec d'autres

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/04/2015, 15h17
  2. Bug depuis mise a jour
    Par black_hole dans le forum OpenCV
    Réponses: 0
    Dernier message: 18/01/2015, 23h05
  3. Mon PC rame depuis quelque jours
    Par papyxy dans le forum Windows
    Réponses: 5
    Dernier message: 05/05/2014, 09h37
  4. Bug VC depuis mise à jour
    Par Robxley dans le forum C++
    Réponses: 11
    Dernier message: 22/12/2010, 14h50
  5. [AWT] Font différente depuis quelques jours
    Par LudwigVon88 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/03/2007, 00h42

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