Page 1 sur 2
résultat de CopyDirectory
Publié : mer. 23/févr./2005 17:15
par Anonyme2
Quels sont les raisons possibles pour que CopyDirectory retourne 0 ?
Publié : mer. 23/févr./2005 17:51
par Fred
Il suffit qu'un fichier ne puisse etre copié (droits, place etc..) pourqu'il retourne 0. Si il retourne 1, tout s'est bien passé.
Publié : mer. 23/févr./2005 17:54
par Anonyme2
Je l'utilise sur un dossier et j'ai systématiquement 0 mais je ne vois pas pourquoi.
Les fichiers sont comparés par dates etc ?
Si tous les fichiers/dossiers sont identiques, ça retourne 0 ?
Publié : mer. 23/févr./2005 18:12
par Fred
En fait, j'accumule les resultats de CopyFile() donc si il y'en a un qui passe à 0, tout passe à 0. Le répertoire copié est absolument identique ?
Publié : mer. 23/févr./2005 18:15
par Anonyme2
Fred a écrit :En fait, j'accumule les resultats de CopyFile() donc si il y'en a un qui passe à 0, tout passe à 0. Le répertoire copié est absolument identique ?
Je n'ai pas vérifié car il y a pas mal de dossiers et de fichiers, c'est une sauvegarde sur ma clée USB de mon dossier de projets PB
Publié : mer. 23/févr./2005 23:30
par Droopy
Vérifie que l'arborescence du répertoire dans lequel tu veux le copier existe
car cette fonction ne sait pas la recréer
Publié : jeu. 24/févr./2005 0:00
par Fred
Tu es sur ?
Publié : jeu. 24/févr./2005 6:45
par Anonyme2
Droopy a écrit :Vérifie que l'arborescence du répertoire dans lequel tu veux le copier existe
car cette fonction ne sait pas la recréer
J'ai effacé le dossier de destination sur la clée USB et tous les sous-dossiers et fichiers, et j'utilise le code suivant
Code : Tout sélectionner
RepSource$ = "C:\Program Files\PureBasic\Libs\MemoryDll"
RepDestination$ = "L:\PureBasic\Libs\MemoryDll"
Resultat = CopyDirectory(RepSource$, RepDestination$,"*.*",#PB_FileSystem_Recursive)
Debug Resultat
J'ai lancé ce code et tout se passe bien, retour 1 et le sous-dossiers de mon dossier principal est bien créé sur la clée USB et l'ensemble des fichiers est présent.
J'ai relancé une nouvelle fois ce code sans rien modifier et le retour se fait avec la valeur 0

Publié : jeu. 24/févr./2005 10:42
par Jacobus
J'avais eu le même problème au mois de décembre
Un coup cela fonctionnait très bien et ensuite blème.
http://purebasic.hmt-forum.com/viewtopic.php?t=1966
J'avais alors réalisé qu'il fallait nécessairement indiquer l'emplacement des répertoires, précisément. Mais visiblement ça ne suffit pas. Il faut que je teste à nouveau car si malgré les répertoires précisés ça marche un coup sur deux, ça va râler dans les chaumières...
Denis, as-tu essayé d'utiliser cette fonction en donnant le choix à l'utilisateur des reps source et destination ?
Publié : jeu. 24/févr./2005 13:21
par Anonyme2
Jacobus a écrit :
Denis, as-tu essayé d'utiliser cette fonction en donnant le choix à l'utilisateur des reps source et destination ?
Non, car le code que j'utilsie c'est les 3 lignes, ni plus ni moins.
Je viens de trouver pourquoi en lisant ton message

. Une partie des fichiers a l'attribut "lecture seule". J'ai sélectionné sur ma clée USB (la destination) tous les fichiers et j'ai supprimé cet attribut. J'ai relancé le code et c'est OK puis nouvel essai et de nouveau 0 car les fichiers d'origine ayant cet attribut l'ont conservé sur la clée.
Fred, peut-être qu'un flag #PB_ForceWrintingFile pour forcer l'écriture de ces fichiers en lecture seule serait bien.
Publié : jeu. 24/févr./2005 18:57
par Jacobus

ok, il faudrait donc que les fichiers copiés soient en même temps transformés en mode Normal. Peut-être qu'en forçant ce changement dans la procédure, lors de la copie, ça arrangerait le travail.
Dobro a fait un excellent tuto sur le changement d'attribut de fichier, en utilisant l'API. Cela devrait pouvoir dépanner.
Demo de Dobro : (voir Forum Débutants)
Code : Tout sélectionner
buffer.s = Space(#MAX_PATH) ; reserve un buffer
buffer.s ="D:\Bidon\test.txt" ; inscrit le chemin du fichier "test.txt"
;si le fichier était en lecture seule, on le modifie.
SetFileAttributes_(@buffer.s,#FILE_ATTRIBUTE_NORMAL )
Reste à intégrer ça dans la procédure de CopyDirectory.
Publié : jeu. 24/févr./2005 19:41
par Droopy
désolé pour le post précédent
j'ai confondu avec la fonction openfile()
qui elle ne sait pas créer le répertoire s'il n'existe pas
Publié : jeu. 24/févr./2005 21:35
par Fred
Denis, j'ai ajouté le support du flag #PB_FileSystem_Force pour CopyDirectory(), dis moi si ca marche (avec et sans):
www.purebasic.com/denis/FileSystem
Publié : ven. 25/févr./2005 7:08
par Anonyme2
Non ca ne va toujours pas
retourne 0 avec ou sans le flag;
J'ai modifié un fichier en lecture seule pour qu'il ait la date d'aujourd'hui et j'ai lancé le code avec et sans le flag. Sur la clée, le fichier n'est pas copié., retour 0 dans les 2 cas.
J'ai retiré l'attribut lecture seule sur le fichier de la clée et j'ai lancé le code avec le flag, retour 0 mais cete fois le fichier est copié.
voilà comment j'ai mis le flag, j'utilise PB 3.93 beta 3
Code : Tout sélectionner
RepSource$ = "C:\Program Files\PureBasic\Libs\MemoryDll"
RepDestination$ = "M:\PureBasic\Libs\MemoryDll"
Resultat = CopyDirectory(RepSource$, RepDestination$,"*.*",#PB_FileSystem_Recursive|#PB_FileSystem_Force)
Debug Resultat [quote][/quote]
Publié : ven. 25/févr./2005 12:13
par Fred
Ok, je vois. J'ai remis une nouvelle version en ligne, tu peux me dire ?