Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je dispose d'une application qui déplace en renommant des fichiers d'un serveur vers un autre.
if FileExists(maDestination) then lb_ret = FileDelete(maDestination) end if lb_ret = FileMove(maSource, maDestination)
Or il apparait que le FileDelete ne fonctionne pas (lb_ret = False et le fichier reste bien présent). Physiquement je peux bien supprimer le fichier cependant, et le FileMove fonctionne si le fichier n'existe pas ; en outre le FileDelete ne fonctionne pas non plus sur le serveur où se trouve maSource.
J'ai essayé de remplacer ces fonctions par celles de kernel32.dll
if FileExists(maDestination) then lb_ret = DeleteFileA(maDestination) end if lb_ret = MoveFileA(maSource, maDestination)
Sans plus de résultat.
Les deux dossiers ont la sécurité la plus basse qui soit et "Everyone" a le contrôle total. Les fichiers sont en lecture seule, mais cela a-t-il une incidence ?
Des idées ?
Dernière modification par sbouvetJD (24-02-2010 14:16:15)
Hors ligne
il y a des espaces au niveau des noms de repertoires ?
Hors ligne
Les fichiers ne seraient pas ouverts (par ton appli ou par une autres) au moment du delete ?...
Hors ligne
Non, et ce qui est bizarre c'est que le FileDelete sur le serveur maSource ne fonctionne pas mais le FileMove si (or le FileMove est l'équivalent d'une copie puis d'une suppression non ?)
Hors ligne
Par contre je définis les chemins en absolu : \\MONSERVEUR\MONDOSSIERPARTAGE\...
Le FileDelete fonctionne en local
EUREKA
En fait le problème vient de l'attribut "Lecture Seule". On ne peut faire de FileDelete sur un fichier en readonly apparemment...
Comment pourrais-je résoudre ce problème ? Il faudrait qu'au moment de la copie, l'attribut ne soit pas lecture seule...
Hors ligne
Il y a la commande DOS ATTRIB -R
Hors ligne
Déclaration de la fonction externe
Function boolean SetFileAttributes ( string lpFileName, ulong dwFileAttributes) Library "kernel32.dll" Alias For "SetFileAttributesW"
et appel dans le code :
IF NOT SetFileAttributes(ls_chemin_cible, 128) THEN Messagebox("Copie", "Impossible d'enlever la lecture seule sur le fichier" + ls_chemin_cible) END IF
Après la copie, il est possible de remettre la lecture seule :
IF NOT SetFileAttributes(ls_chemin_cible, 1) THEN Messagebox("Copie", "Impossible de mettre la lecture seule sur le fichier" + ls_chemin_cible) END IF
Dernière modification par Aloneg (24-02-2010 07:35:17)
Hors ligne
Merci de ces réponses. Je ne m'explique toujours pas pourquoi le Move fonctionnait et pas le Delete... Mais mon problème est résolu !
Hors ligne