Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de copies et suppressions de répertoire

9 réponses
Avatar
HD
Bonjour,

J'ai un script VBA qui crée un répertoire1 (sur le Pc), puis copie un
répertoire2 (du réseau) vers ce répertoire1 et qui enfin détruit le
répertoire2.

Mais mon problème est que le répertoire2 n'est pas détruit et que ce
répertoire2 n'est pas complétement copié sur le répertoire1. J'ai un message
70, permission refusé lors de la tentative de destruction du répertoire.
Comme si la copie bloqué encore le répertoire.

J'utilise FSO pour les copies et suppressions de répertoires et il semble
que même en mettant une boucle Doevents pendant plus de 10 secondes (le
répertoire à copier/détruire est très petit, la manip. à la main met moins
d'une seconde à la copie) après la copie et avant la suppression, le script
plante. Alors qu'anciennement il ne me posait aucun problème...

Que ce passe-t-il ?

Voici un bout de mon script:

FSO.CopyFolder Repertoire2, Repertoire1
If Err.Number <> 0 Then
ret = MsgBox("Une erreur est survenue lors de la copie. Le répertoire
'" & Repertoire2 & "' du serveur NE DOIT PAS être détruit.", vbCritical,
"ATTENTION !!!")
Else
Attendre (500)
FSO.DeleteFolder Repertoire2
Attendre (500)
If Dir(Repertoire2, vbDirectory) <> "" Then
ret = MsgBox("Erreur. Rép non détruit !", vbExclamation)
End If
End If

Merci d'avance pour votre aide.
--
@+
HD

9 réponses

Avatar
Clément Marcotte
Bonjour,

70, permission refusé lors de la tentative de destruction du
répertoire.

Comme si la copie bloqué encore le répertoire.


Avec FOS, ce genre de message d'erreur sort quand on tente d'effacer
ou de déplacer un fichier en lecture seule.

Avatar
HD
Avec FSO, ce genre de message d'erreur
sort quand on tente d'effacer ou de déplacer
un fichier en lecture seule.


Un grand MERCI à toi Clément !!! Effectivement mon problème vient bien de
quelques simples petits fichiers en lecture seule qui empêche mon répertoire
de bien se copier... Je ne connaissais pas ce problème important dans FSO...

Comment peut on donc copier et supprimer un répertoire même si il existe des
fichiers en lecture seul dans le répertoire ?

Merci d'avance.
--
@+
HD

Avatar
Alain CROS
Bonjour.

On peut déplacer plutôt que copier puis effacer.

Function MoveRep&(Source$, Dest$)
Dim FSO As Object, Folder As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set Folder = FSO.GetFolder(Source)
FSO.MoveFolder Source, Dest & "" & Folder.Name
MoveRep = Err.Number
Set Folder = Nothing
Set FSO = Nothing
End Function'AC

Sub Utilisation()
Dim Rep1$, Rep2$
Rep2 = "CheminCompletRépertoireSource"
Rep1 = "CheminCompletRépertoireDest"
If MoveRep(Rep2, Rep1) <> 0& Then _
MsgBox "Une erreur est survenue lors de la copie. Le répertoire " & _
Rep2 & " du serveur NE DOIT PAS être détruit.", vbCritical, "ATTENTION !!!"
End Sub

Alain CROS


"HD" a écrit dans le message de news: bvq96d$1gn$
Avec FSO, ce genre de message d'erreur
sort quand on tente d'effacer ou de déplacer
un fichier en lecture seule.


Un grand MERCI à toi Clément !!! Effectivement mon problème vient bien de
quelques simples petits fichiers en lecture seule qui empêche mon répertoire
de bien se copier... Je ne connaissais pas ce problème important dans FSO...

Comment peut on donc copier et supprimer un répertoire même si il existe des
fichiers en lecture seul dans le répertoire ?

Merci d'avance.
--
@+
HD





Avatar
HD
On peut déplacer plutôt que copier puis effacer.
Le problème se posera toujours puiqu'il est lié à l'utilisation de FSO.


Car comme le disait Clément:
Avec FSO, ce genre de message d'erreur
sort quand on tente d'effacer ou de déplacer
un fichier en lecture seule.
Ce que j'ai vérifié et effectivement FSO pose problème sur les répertoires



contenant un ou plusieurs fichiers en lecture seul....

--
@+
HD



Avatar
Clément Marcotte
Bonjour,

Je me suis déjà servi de quelque chose comme cela, pour enlever
l'attribut "Lecture seule" de certains fichiers:

If fichier.attributes and 1 Then
fichier.attributes = fichier.attributes - 1
End If


À l'origine c'était dans un script VBS (très semblable à VBA)

' Ce script balaie un dossier entier de façon récursive et
' enlève l'attribut lecture seule
Dim FSys, DFile
Set FSys = CreateObject("Scripting.FileSystemObject")
ScanFolder("c:windowsfonts")
'DFile.Close
'MsgBox "La liste des fichiers a été créée"
Sub ScanFolder(folderSpec)
Set FSys = CreateObject("scripting.filesystemobject")
Set cedossier = FSys.GetFolder(folderspec)
Set collectiondossiers = cedossier.SubFolders
i = 1
For Each ifolder In collectiondossiers
For Each fichier In ifolder.Files
If fichier.attributes and 1 Then
fichier.attributes = fichier.attributes - 1
End If
Next
Next
MsgBox "Fin du travail"
End Sub

"HD" a écrit dans le message de
news:bvq96d$1gn$
Avec FSO, ce genre de message d'erreur
sort quand on tente d'effacer ou de déplacer
un fichier en lecture seule.


Un grand MERCI à toi Clément !!! Effectivement mon problème vient
bien de

quelques simples petits fichiers en lecture seule qui empêche mon
répertoire

de bien se copier... Je ne connaissais pas ce problème important
dans FSO...


Comment peut on donc copier et supprimer un répertoire même si il
existe des

fichiers en lecture seul dans le répertoire ?

Merci d'avance.
--
@+
HD





Avatar
Alain CROS
Bonjour.

AMHA, ça n'a rien à voir avec FSO.
A tu essayé mon script ?
Chez moi Win98 sans réseau, un répertoire avec des fichiers en lecture seule est déplacé sans problème.
Si l'erreur est toujours généré, fais une boucle comme l'indique Clément pour supprimer l'attribut lecture seule des fichiers.

Alain CROS.

"HD" a écrit dans le message de news: bvqqtp$gqi$
On peut déplacer plutôt que copier puis effacer.
Le problème se posera toujours puiqu'il est lié à l'utilisation de FSO.


Car comme le disait Clément:
Avec FSO, ce genre de message d'erreur
sort quand on tente d'effacer ou de déplacer
un fichier en lecture seule.
Ce que j'ai vérifié et effectivement FSO pose problème sur les répertoires



contenant un ou plusieurs fichiers en lecture seul....

--
@+
HD







Avatar
HD
AMHA, ça n'a rien à voir avec FSO.


Et pourtant si. Puisque la copie de ce répertoire ne pose pas de problème
lorsqu'elle est effectuée à la main. Cette copie ne pose pas non plus de
problème si j'enlève l'attribut lecture seul sur tous les fichiers de ce
répertoire.

Chez moi Win98 sans réseau, un répertoire avec
des fichiers en lecture seule est déplacé sans problème.
Je suis en réseau. FSO a peut être du mal à géré les fichiers en lecture

seul dans ce cas?

Si l'erreur est toujours généré, fais une boucle comme l'indique
Clément pour supprimer l'attribut lecture seule des fichiers.


Une réponse sur un autre forum m'a donnée la solution. Il y'a un script qui
n'utilise pas FSO mais une API. Cette API serait plus fiable et de plus
beaucoup plus rapide d'exécution que FSO:
http://faq.vb.free.fr/index.php?question5

Pour que cela marche en VBA il faut mettre .hWnd = 0
--
@+
HD

Avatar
HD
Une réponse sur un autre forum m'a donnée la solution. Il y'a un
script qui n'utilise pas FSO mais une API. Cette API serait plus
fiable et de plus beaucoup plus rapide d'exécution que FSO:
http://faq.vb.free.fr/index.php?question5
Pour que cela marche en VBA il faut mettre .hWnd = 0


Aïe... En passant par cette API, la destruction nous demande la confirmation
de destruction du répertoire et de plus redemande confirmation de
destruction de ce répertoire si il comporte des fichiers en lecture seul...
--
@+
HD

Avatar
HD
Aïe... En passant par cette API, la destruction nous demande la
confirmation de destruction du répertoire et de plus redemande
confirmation de destruction de ce répertoire si il comporte des
fichiers en lecture seul...
C'est bon... les flags sont là pour ça...

http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp
--
@+
HD