Copier-Coller-Supprimer de Win 9X vers XP

cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007 - 26 mai 2003 à 16:57
cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007 - 28 mai 2003 à 08:43
Il ya quelque temps, Gerome GUILLEMIN avait déposé le code suivant
----------------------------------------------------------------
'SHFILEOPERATION Copier/bouger des fichiers facilement avec cette puissante structure !
'07/07/2000

'Delarations
Public Const FO_COPY = &H2
Public Const FO_DELETE = &H3
Public Const FO_MOVE = &H1
Public Const FO_RENAME = &H4

Public Const FOF_CONFIRMMOUSE = &H2
Public Const FOF_ALLOWUNDO = &H40
Public Const FOF_FILESONLY = &H80
Public Const FOF_MULTIDESTFILES = &H1
Public Const FOF_NOCONFIRMATION = &H10
Public Const FOF_NOCONFIRMMKDIR = &H200
Public Const FOF_NO_CONNECTED_ELEMENTS = &H1000
Public Const FOF_NOCOPYSECURITYATTRIBS = &H800
Public Const FOF_NOERRORUI = &H400
Public Const FOF_RENAMEONCOLLISION = &H8
Public Const FOF_SILENT = &H4
Public Const FOF_SIMPLEPROGRESS = &H100
Public Const FOF_WANTMAPPINGHANDLE = &H20
Public Const FOF_WANTNUKEWARNING = &H2000
Public Const FOF_NORECURSION = &H1000 '// don't recurse into directories.

Public Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String
End Type

Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
(Dest As Any, Sourc As Any, ByVal Length As Long)

Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _
(lpFileOp As Any) As Long

'Main program example
Sub Main()
Dim fos As SHFILEOPSTRUCT ' structure to pass to the function
Dim retval As Long ' return value

With fos
.hWnd = 0 'ou Me.hWnd si on a une Feuille par exemple .wFunc FO_COPY 'Action Copie
.pFrom = "c:\toto" & vbNullChar 'Source path
.pTo = "c:\temp" & vbNullChar 'Dest Path
.fFlags = FOF_NOCONFIRMMKDIR Or FOF_WANTMAPPINGHANDLE 'Flags de Copie
.fAnyOperationsAborted = 0
.hNameMappings = 0
.lpszProgressTitle = vbNullChar
End With

retval = SHFileOperation(fos)

End Sub
------------------------------------------------------------------
Ce code fonctionne parfaitement sous Windows 9X.
Par contre, il ne fonctionne pas sous Windows XP.

Je cherche désespérément une personne qui serait capable de me faire fonctionner ce code sous XP.

Merci pour toutes les réponses fiables que vous allez rendre à cette question...

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
26 mai 2003 à 18:20
Je suis désolé, mais ca marche parfaitement bien chez moi, et j'ai windows XP !

Quel est le message d'erreur ?

De plus, je ne vois pas ce que viens faire la déclaration de la fonction CopyMemory ici : elle n'est pas utilisée... Peut-être que le code source n'est pas complet...

En tout cas, ce code marche très bien sous Win XP VB 6 avec aucun services pack !

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007
27 mai 2003 à 13:40
Merci pour ta réponse.

En effet j'ai réussi en partie à faire fonctionner ce code sous XP en changeant les droits d'accès.
Seulement, il copie bien, mais, il ne supprime pas.

Le code erreur est : "Impossible de supprimer fichier : Impossible de lire à partir du fichier ou de la disquette source."

Je précise que le code que j'ai mis sur ce forum, représente bien la trame du programme que je suis en train d'élaborer.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 mai 2003 à 18:50
Oui c'est normal que tu ne fasse que copier : le flag de la fonction est "copier" (FO_COPY) et non "couper". Pour supprimer un fichier, il faut utiliser le flag FO_DELETE.

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007
28 mai 2003 à 08:43
Pardon, j'ai oublié de mettre la partie de mon code qui est la suivante :

If Remp = 1 Then
With fos .wFunc FO_DELETE 'Action Efface
.pFrom = "\" & Destinat & "\Sauve" & NomStation
.fFlags = FOF_NOCONFIRMMKDIR Or FOF_NOCONFIRMATION Or FOF_MULTIDESTFILES
End With
retval = SHFileOperation(fos)
End If

Je trouve que c'est un peu merdique ma façon d'opérer.
Donc, si tu es d'accord, je veux bien t'envoyer mon prog complet sur ta boîte ?
Si tu vas dans ce sens, il me faut ton adress e.mail.
0
Rejoignez-nous