1 pièce(s) jointe(s)
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:
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 "".
.
bug copie fichiers avec SHFILES
Bonjour Shait,
Citation:
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 :
Citation:
As-tu plusieurs fichiers dans NomsTO ?
Oui
Citation:
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.
Citation:
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.
Citation:
Si oui, as-tu pensé à mettre l'options oFOF_MULTIDESTFILES ?
Moi non :aie: j'ai fait un copier coller, mais Nono40 y avait pensé;)
Citation:
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