OVH Cloud OVH Cloud

Problème avec MoveFileEx

15 réponses
Avatar
Assi
Bonjour,

J'essaie de d=E9placer un fichier avec l'API MoveFileEx, =E0=20
l'ex=E9cution, j'obtient un code erreur suivant: 123, Erreur=20
d=E9finie par l'application ou par l'objet.
Cela ne marche pas car MoveFileEx renvoie toujours 0, donc=20
=E9choue

Est-ce un probl=E8me de droit?

Si quelqu'un a une id=E9e, je le remecie beaucoup
Ci-dessous le squelette du code

D'avance merci

Assi

Private Sub CopyTempFile(sSource As String, sDestination=20
As String)
Dim fso As FileSystemObject, sPath$, oFolder As=20
IWshRuntimeLibrary.Folder
Dim lRet As Long
On Error GoTo CopyFileError
Set fso =3D CreateObject("Scripting.FileSystemObject")
Set oFolder =3D fso.CreateFolder("c:\Temporary")
sPath =3D oFolder.Path
If Right$(sPath, 1) <> "\" Then sPath =3D sPath & "\"
'Call fso.CopyFile(sSource, sPath, True)
lRet =3D MoveFileEx(sSource, sPath, _=20
MOVEFILE_REPLACE_EXISTING Or MOVEFILE_DELAY_UNTIL_REBOOT)
If lRet =3D 0 Then
Err.Raise Err.LastDllError
End If
ExitSub:
Set fso =3D Nothing
Set oFolder =3D Nothing
Exit Sub
CopyFileError:
If Err.Number =3D 58 Then
fso.DeleteFolder "C:\Temporary"
Resume
Else
MsgBox Err & ": " & Err.Description
GoTo ExitSub
End If
End Sub

Noter que sSource est du type '\\ServName\Dossier\Dossier2
\Fichier'

5 réponses

1 2
Avatar
scraper
Dans son message %,

ng nous a écrit/ répondu :


Salut,
Il ne s'agt pas d'une dll mais d'un exe : rundll32.exe.

Utilise Shell ou l'API ShellExecute.



oui, tu as raison, merci ! :-)

grâce à vous, j'en suis arrivé (presque) à ce que je voulais .... ;-)





--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
François Picalausa
Bonjour/soir,
"scraper" a écrit dans le message de
news:%
Dans son message %,
François Picalausa nous a écrit/ répondu



j'me sens con, là .... j'avais pas compris ça comme ça !
faut que j'aille me reposer, moi .... :-)



Ca commence toujours comme ça... on code un peu puis. mais c'est intéressant
ça...et après 48 heures devant l'écran et plus de café pour tenir, on se
demande de quoi qu'c'est que les gens sur les newsgroups qu'ils cause!?
:-P

sinon, j'ai trouvé ça, dans API-Guide :
----
· lpOperation
Pointer to a null-terminated string that specifies the operation to
perform. The following operation strings are valid: "open"
The function opens the file specified by lpFile. The file can be an
executable file or a document file. The file can be a folder to open.
"print"
The function prints the file specified by lpFile. The file should be
a document file. If the file is an executable file, the function
opens the file, as if "open" had been specified. "explore"
The function explores the folder specified by lpFile.

The lpOperation parameter can be NULL. In that case, the function
opens the file specified by lpFile. ------

il semble que seuls ces paramètres soient dispo ?



Si AllAPI était la bible, ça se saurait :-)
Un tour sur la MSDN:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
"Pointer to a null-terminated string, referred to in this case as a verb"

si tu veux bien, en outre, me donner quelques précisions
complémentaires, SVP, sur l'emploi du Shell de VB ??



hmmm... pour commencer par les choses simples, il y a toutes les fonctions
du shell:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/functions.asp
Quand ça suffit plus, on peut, à coup de typelib, s'attaquer aux interfaces:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/ifaces/interfaces.asp
Sinon, généralement, le shell programmer's guide explique "simplement" pas
mal de choses:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_intro.asp

Mais tout ça dépend bien entendu du problème posé :-)


en VBS, j'arrivais par exemple à faire pauser l'exécution de la
méthode .run du Shell (Shell.Run "mon appli",1, True ) ....

comment faire de même en VB ??



Ca, c'est sur la KB:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;129796

Note qu'on peut aussi utiliser l'objet shell en VB:
Ajouter dans les références Shell32
et utiliser les articles de la msdn:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/objects/shell/shell.asp
Mais j'ai l'impression que l'objet est différent... :-(

Comment intercepter les erreurs générées durant l'exécution de Shell ?
(jai essayé avec On Error Resume Next : If err then ..... mais ça
joue pas ?)



Si tu essaye On Error sur un ShellExecute, ça ne focntionnera pas.
Il faut tester la valeur retourbée:
Dim Retour As Long
Retour = ShellExecute(...)
If REtour > 32 Then Msgbox "Réussite de l'opération"
Tu as les codes d'erreurs possible dans la msdn, rubrique Return Value de
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp



encore un grand merci à toi ...



--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
scraper
Dans son message ,

François Picalausa nous a écrit/ répondu :


Ca commence toujours comme ça... on code un peu puis. mais c'est
intéressant
ça...et après 48 heures devant l'écran et plus de café pour tenir,
on se
demande de quoi qu'c'est que les gens sur les newsgroups qu'ils
cause!? :-P




c'est bien de savoir que son cas est pas isolé ! lol

Si AllAPI était la bible, ça se saurait :-)



ah ...

Un tour sur la MSDN:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
"Pointer to a null-terminated string, referred to in this case as a
verb"



d'acc, j'y ai été ...
je commence à mieux comprendre ...



bon, merci pour les liens, ça va me faire de la lecture ... je vais essayer d'éplucher ça à tête reposée !

en VBS, j'arrivais par exemple à faire pauser l'exécution de la
méthode .run du Shell (Shell.Run "mon appli",1, True ) ....

comment faire de même en VB ??



Ca, c'est sur la KB:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;129796



houlà ... bien compliqué ... je crois que je vais rester au Run de VBS .... :-)

y a t il une contre indication rédhibitoire ?

Note qu'on peut aussi utiliser l'objet shell en VB:
Ajouter dans les références Shell32
et utiliser les articles de la msdn:
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/objects/shell/shell.asp
Mais j'ai l'impression que l'objet est différent... :-(



oui ... là, ça correspond pas trop à ce que je cherche ...

Si tu essaye On Error sur un ShellExecute, ça ne focntionnera pas.



oui, j'avais vu, sur AllApi (hum c'est pas le top, mais ça me dépanne bien ...)

mais c'est si je lance une commande avec l'objet Shell de VB ....

(parce que j'ai trouvé ce moyen ci pour exécuter mon fichier inf .... puisqu'avec les API natives j'y arrive pas ..)

ça fonctionne très bien, sauf que j'aurais bien aimé intercepter les erreurs durant l'exécution de la commande !


encore un grand merci à toi ...





--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Zoury
ReSalut! :O)

Est-ce parce qu'il s'agit d'un chemin UNC?



tiré de la MSDN :

"[in] Pointer to a null-terminated string that names an existing file or
directory on the local computer.
If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT, the file cannot exist on a
remote share because delayed operations are performed before the network is
available."

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
François Picalausa
Bonjour/Soir

"scraper" a écrit dans le message de
news:%
Dans son message ,

François Picalausa nous a écrit/ répondu :
Ca, c'est sur la KB:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;129796



houlà ... bien compliqué ... je crois que je vais rester au Run de
VBS .... :-)

y a t il une contre indication rédhibitoire ?



Le fait que ce qui est prévu pour VBS est plus lent...

Si tu essaye On Error sur un ShellExecute, ça ne focntionnera pas.



oui, j'avais vu, sur AllApi (hum c'est pas le top, mais ça me
dépanne bien ...)

mais c'est si je lance une commande avec l'objet Shell de VB ....

(parce que j'ai trouvé ce moyen ci pour exécuter mon fichier inf ....
puisqu'avec les API natives j'y arrive pas ..)



Si j'y pense, ce W-E, j'essayerai de faire un bout de code pour montrer
comment faire (par contre, je promets pas de faire plus simple que les
autres ;-) )
(Problème, j'ai pas de cab et inf pour tester... si tu avais ce genre de
choses? => BAL)

ça fonctionne très bien, sauf que j'aurais bien aimé intercepter les
erreurs durant l'exécution de la commande !



Apparement, tu peux tester le code de retour de run.
<quote src="Platform SDK">
The Run method returns an integer
</quote>

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
1 2