J'essaie d'automatiser le transfert d'un fichier dans les répertoires personnels de mes utilisateurs, mais je suis bloqué par une erreur "Permission Denied" (autorisation refusée). Cette option est renvoyée à la ligne 6 avec l'appel de CopyFile.
Il existe d'autres parties du script (non illustrées) qui créent et copient le contenu d'un dossier à l'aide des mêmes répertoires source et cible et fonctionnent parfaitement. Ce n'est que lorsque j'utilise CopyFile qu'il échoue.
dim fso
set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FileExists("H:\Minecraft\.minecraft\options.txt") then
fso.CopyFile "C:\Minecraft\options.txt", "H:\Minecraft\.minecraft\"
end if
set fso = nothing
H:
est un répertoire de base du réseau dans lequel l'utilisateur actuel dispose de droits lecture/écriture complets.
J'ai essayé d'ajouter/de supprimer les barres obliques de fin des chemins, en ajoutant "options.txt"
au chemin de destination, en supprimant l'argument false
... Vous ne savez pas quoi essayer d'autre. Des pensées?
Merci!
Pour info, ce morceau de code, qui vient juste avant le bit sujette aux erreurs ci-dessus, s'exécute parfaitement à chaque fois:
if not fso.FolderExists("H:\Minecraft\.minecraft\bin\") then
if not fso.FolderExists("H:\Minecraft\.minecraft\") then
fso.CreateFolder("H:\Minecraft\.minecraft\")
end if
fso.GetFolder("C:\Minecraft\bin\").Copy "H:\Minecraft\.minecraft\"
end if
Je n'ai jamais vu que CopyFile
échouer avec une erreur "autorisation refusée" dans l'un de ces 3 scénarios:
pour moi, ajouter /
a travaillé à la fin de l'emplacement du dossier . Par conséquent, si vous copiez dans un dossier, n'oubliez pas de mettre /
Une autre chose à vérifier est de savoir si des applications ont toujours un blocage sur le fichier.
Eu quelques problèmes avec MoveFile. Une partie de mon problème d'autorisations était que mon script ouvre le fichier (dans ce cas dans Excel), apporte une modification, le ferme, puis le déplace dans un dossier "traité".
Lors du débogage de plusieurs choses, le script s'est écrasé plusieurs fois. En fouillant dans l'erreur d'autorisation refusée, j'ai constaté que 4 instances d'Excel s'exécutaient en arrière-plan, car le script n'avait jamais pu mettre correctement fin à l'application en raison de ces blocages. Apparemment, l'un d'entre eux était toujours en possession du dossier et, par conséquent, "autorisation refusée".
Basé sur votre variable source (sourcePath = "C:\Minecraft\bin\"
), je soupçonne que votre code dur pointe au mauvais endroit
fso.CopyFile "C:\Minecraft\options.txt", destinationPath, false
devrait être
fso.CopyFile "C:\Minecraft\bin\options.txt", destinationPath
ou
fso.CopyFile sourcePath & "options.txt", destinationPath
Pour moi, seuls 7 à 9 appels sur MoveFolder sur 10 ont abouti. De plus, chaque fois que je relançais le test, ce serait un dossier différent qui échouait.
J'avais des barres obliques sur mon chemin, alors ce n'était pas mon problème.
J'avais fermé tous les fichiers Excel ouverts dans le dossier, alors ce n'était pas mon problème.
Alors j'ai alors essayé de résoudre mon problème en plaçant un DoEvents et Application.Wait (DateAdd ("S", 1 #, maintenant)) entre les appels WorkBook.Close et FSO.MoveFolder.
Cela a rendu les choses meilleures mais toujours pas parfait.
Ce que j'ai fait pour résoudre ce problème a été de placer l'appel du dossier de déménagement dans une boucle jusqu'à ce que cela fonctionne. Ce qui est généralement sur le premier et parfois sur le deuxième appel. Je n'ai pas vu échouer toutes les dix tentatives de ma boucle de déplacement de force!
Dans le monde des fonctions asynchrones cachées, vous devez donner un peu de temps pour que ce qui est proche se soit réellement passé à tous les niveaux!
Tu peux le faire:
fso.CopyFile "C:\Minecraft\options.txt", "H:\Minecraft\.minecraft\options.txt"
Incluez le nom de fichier dans le dossier dans lequel vous copiez.
J'ai lu votre problème, et j'ai eu le même problème. Mais après en avoir changé quelques-uns, mon problème "Permission Denied" est résolu.
Private Sub Addi_Click()
'On Error Resume Next
'call ds
browsers ("false")
Call makeAdir
ffgg = "C:\Users\Backups\user\" & User & "1\data\"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.Getfolder("c:\users\Backups\user\" & User & "1\data")
f.Attributes = 0
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
Call fso.Copyfile(filetarget, ffgg, True)
Regardez ffgg = "C:\Users\Backups\user\" & User & "1\data\"
, avant que je change, c'était ffgg = "C:\Users\Backups\user\" & User & "1\data"
Quand j'ajoute une barre oblique inverse après "\data\"
, mon problème est résolu Essayez de rajouter une barre oblique. Peut-être résolu votre problème. Bonne chance.