
|
|
Auteur
|
Message
|
1
|
|
|
|
Salut je suis en train de programmer un client FTP et j'utilise les functions de l'API wininet.dll et, pour supprimer un dossier, la fonction est:
Function FtpRemoveDirectory (connection, nom du dossier)
Cependant, la fonction n'est pas récursive: Elle fonctionne seulement si le dossier est vide. J'ai besoin d'un script pour supprimer tous les sous-dossiers et fichier dans le dossier, merci à l'avance
|
|
|
|
|
Salut!
Je ne connais pas l'API, mais vu le contenu de la dll, je dirais :
FtpFindFirstFile : si la valeur retournée correspond à un fichier, tu l'effaces avec FtpDeleteFile. Si c'est un répertoire, alors tu appelles cette fonction récursivement en passant une chaine de caractères correspondant au chemin vers ce répertoire.
Quand l'appel réursif retourne, tu as supprimé tous les fichiers et sous-dossiers du répertoire. Il te suffit ensuite de supprimer le répertoire retourné par FtpFindFirstFile avec ta fonction FtpRemoveDirectory.
Cette technique suppose que FtpFindFirstFile te retourne indifféremment des fichiers ou des répertoires, et que tu aies un moyen de les distinguer (à l'aide d'un attribut par exemple).
Si ça peut t'aider...
@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
|
J'ai trouvé mon script pour vider un dossier, mais la fonction FtpRemoveDirectory retourne toujours une erreur #6 - Overflow, peu importe comment je l'utilise. J'ai essayé un FtpCommand et elle retourne toujours False, et le dossier vide n'est pas supprimé. Une idée?
|
|
|
|
|
Salut!
Idée qui me vient en premier : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wini(...)
Sinon, es-tu sûr d'avoir le droit de supprimer le répertoire distant ? (est-ce que le serveur FTP distant a les droits pour supprimer le répertoire).
-->Message édité par Minus-et-Cortex le 12/10/2006 12:28:57<--
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
J'ai tous les droits, c'est un serveur que j'ai créé uniquement à des fins de test. J'ai essayé, juste pour voir,
FtpRemoveDirectory hConn, vbNullString
et j'ai une erreur #6-Overflow.
|
|
|
|
|
Salut!
Cela me semble un peu louche de passer ce que je crois être une chaîne vide (vbNullString) pour supprimer un répertoire. Le deuxième paramètre doit être le nom du répertoire (chaîne à zéro terminal). Il faut que cette fonction utilise ole contexte retourné par l'appel à InternetConnect (cf http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wini(...)).
Eventuellement, si tu veux que je jette un coup d'oeil sur ton code...
@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
J'ai fait un petit programme de test qui va juste se connecter à un serveur de test et supprimer un dossier. L'adresse:
http://www.testserver.b4site.com/source stuff/prjtest.exe
Tu as juste à l'exécuter, si tu recoit le message "your wininet.dll is corrupt" donc le programme a fini avec succès, contrairement à ce qu'on peut penser. J'ai fait les messages d'erreur le + vite possible
Laisse-moi savoir si le programme fait un Overflow, merci.
|
|
|
|
|
Salut!
J'ai, après avoir cliqué sur le bouton 'Click here', une première pop-up qui affiche start point, puis une seconde qui indique une erreur 'Runtime error 6 Overflow'.
@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
Ok le code quand on clique sur le bouton "Click here":
Sub btn_Click()
Dim hInt As Long
Dim hConn As Long
Dim hFile As Long
MsgBox "Start point"
hInt = InternetOpen("test", 1, vbNullString, vbNullString, 0) 'Just connect to Internet
hConn = InternetConnect(hInt, "<SERVER NAME>", 21, "<USERNAME>", "<PASSWORD>", 1, 0, 0) 'Login to server
hFile = FtpRemoveDirectory(hConn, "newcreated") 'CRASH HERE!!!!
MsgBox "Program completed successfully!"
End Sub
C'est ce code qui s'exécute quand tu clique sur le bouton. Juste comme ça, les fonctions wininet utilisées:
Private Declare Function InternetOpen Lib "wininet.dll" _
Alias "InternetOpenA" _
(ByVal lpszAgent As String, _
ByVal dwAccessType As Long, _
ByVal lpszProxyName As String, _
ByVal lpszProxyBypass As String, _
ByVal dwFlags As Long) As Long
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternet As Long, _
ByVal lpszServerName As String, _
ByVal nServerPort As Long, _
ByVal lpszUserName As String, _
ByVal lpszPassword As String, _
ByVal dwService As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Private Declare Function FtpRemoveDirectory Lib "wininet.dll" Alias "FtpRemoveDirectoryA" (ByVal hFtpSession As Integer, ByVal lpszDirectory As String) As Boolean
-->Message édité par alpha02 le 20/10/2006 23:17:15<--
|
|
1
|
|

|

|