Bonjours, je m'en remet à la communauté Vbfrance car là, je ne sais plus quoi faire
J'ai pourtant essayé une multitude de code de téléchargement de fichier sur un FTP mais j'en reviens toujours au même problème : Le fichier téléchargé est vide.
J'ai essayé les code de ce forum, de developpez, de msdn, et j'en passe sur deux serveur FTP ; un avec protocole FTP et un autre avec HTTP.
Rien à faire, c'est strictement vide ! (0 octet)
Voici ma procédure :
1 - Je liste les fichiers du dossier avec ce code :
Public Function dlFichier(ByVal serveurCible As String, _
ByVal identifiant As String, _
ByVal motDePasse As String) As Array
Dim monResponseStream As Stream = Nothing
Dim monStreamReader As StreamReader = Nothing
Dim monResultat As Array = Nothing
' Instanciation d'une Uri qui va contenir le chemin source
Dim monUriServeur As New System.Uri(serveurCible)
' Vérification de la validité de l'Uri du fichier sur le serveur FTP
If Not (monUriServeur.Scheme = Uri.UriSchemeFtp) Then
MessageBox.Show("L'Uri du serveur FTP n'est pas valide", _
"Une erreur est surevnue", _
MessageBoxButtons.OK, MessageBoxIcon.Warning)
'Si Uri non valide, arrêt du listage
Return monResultat
Exit Function
End If
Dim filelist As New List(Of String)
Try
' Création de la requête de récupération de la liste des fichiers
Dim maRequeteListe As FtpWebRequest = CType(WebRequest.Create(monUriServeur), FtpWebRequest)
maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectoryDetails
' Vérification de la présence des identifiants d'un compte, si aucun alors
' la connexion se fait en mode anonyme
Dim monCompteFtp As New NetworkCredential(identifiant, motDePasse)
maRequeteListe.Credentials = monCompteFtp
' Récupération de la liste de fichiers
Dim maResponseListe As FtpWebResponse = CType(maRequeteListe.GetResponse, FtpWebResponse)
' Placement du flux provenant du serveur dans un streamreader
monStreamReader = New StreamReader(maResponseListe.GetResponseStream, _
Encoding.Default)
' Lecture du stream reader
Dim listeBrute As String = monStreamReader.ReadToEnd
' Découpage de chaque fichier dans la liste concaténée de fichiers
Dim separateur() As String = {Environment.NewLine} ' -> retour chariot
' Découpage et récupération des noms de fichiers
Dim tableauListe() As String = listeBrute.Split(separateur, _
StringSplitOptions.RemoveEmptyEntries)
Dim listeFinale As New List(Of String)
' Lecture du tableau et tri des noms de fichiers
Dim i As Integer = 0
While i < tableauListe.Length
' Les répertoires se différencient des fichiers par le fait que
' la chaîne que l'on récupère commence par un "d".
' ON n peux donc dire dossier = commence avec "d"
If Not tableauListe(i).StartsWith("d") Then
filelist.Add(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
End If
i += 1
End While
monResultat = listeFinale.ToArray
' Gestion des exceptions
Catch ex As UriFormatException
MessageBox.Show(ex.Message)
Catch ex As WebException
MessageBox.Show(ex.Message)
Finally
' Fermeture des différents flux utilisés
If monResponseStream IsNot Nothing Then
monResponseStream.Close()
End If
If monStreamReader IsNot Nothing Then
monStreamReader.Close()
End If
End Try
'Fonction de l'étape 2
Return monResultat
End Function
2 - Je rajoute ce code :
For Each setfiles In filelist
publicfile = "http://cloud.olympe.in/remote.php/webdav/srv/" & ComboBox1.SelectedItem & "/" & setfiles
My.Computer.Network.DownloadFile(publicfile, My.Application.Info.DirectoryPath & "\server" & ComboBox1.SelectedItem & "" & setfiles, identifiant, motDePasse, False, 1000000, True, FileIO.UICancelOption.DoNothing)
Next
MsgBox("Données ajoutées !", vbInformation, "Ok")
Catch ex As Exception
MsgBox(ex.Message & " sur << " & publicfile & ">>", MsgBoxStyle.YesNo, "Echec")
End
End Try
ce qui nous donne donc :
Public Function dlFichier(ByVal serveurCible As String, _
ByVal identifiant As String, _
ByVal motDePasse As String) As Array
Dim monResponseStream As Stream = Nothing
Dim monStreamReader As StreamReader = Nothing
Dim monResultat As Array = Nothing
' Instanciation de deux Uri qui vont contenir les chemins source et destination
Dim monUriServeur As New System.Uri(serveurCible)
' Vérification de la validité de l'Uri du fichier sur le serveur FTP
If Not (monUriServeur.Scheme = Uri.UriSchemeFtp) Then
MessageBox.Show("L'Uri du serveur FTP n'est pas valide", _
"Une erreur est surevnue", _
MessageBoxButtons.OK, MessageBoxIcon.Warning)
'Si Uri non valide, arrêt du listage
Return monResultat
Exit Function
End If
Dim filelist As New List(Of String)
Try
' Création de la requête de récupération de la liste des fichiers
Dim maRequeteListe As FtpWebRequest = CType(WebRequest.Create(monUriServeur), FtpWebRequest)
maRequeteListe.Method = WebRequestMethods.Ftp.ListDirectoryDetails
' Vérification de la présence des identifiants d'un compte, si aucun alors
' la connexion se fait en mode anonyme
Dim monCompteFtp As New NetworkCredential(identifiant, motDePasse)
maRequeteListe.Credentials = monCompteFtp
' Récupération de la liste de fichiers
Dim maResponseListe As FtpWebResponse = CType(maRequeteListe.GetResponse, FtpWebResponse)
' Placement du flux provenant du serveur dans un streamreader
monStreamReader = New StreamReader(maResponseListe.GetResponseStream, _
Encoding.Default)
' Lecture du stream reader
Dim listeBrute As String = monStreamReader.ReadToEnd
' Découpage de chaque fichier dans la liste concaténée de fichiers
Dim separateur() As String = {Environment.NewLine} ' -> retour chariot
' Découpage et récupération des noms de fichiers
Dim tableauListe() As String = listeBrute.Split(separateur, _
StringSplitOptions.RemoveEmptyEntries)
Dim listeFinale As New List(Of String)
' Lecture du tableau et tri des noms de fichiers
Dim i As Integer = 0
While i < tableauListe.Length
' Les répertoires se différencient des fichiers par le fait que
' la chaîne que l'on récupère commence par un "d".
' ON n peux donc dire dossier = commence avec "d"
If Not tableauListe(i).StartsWith("d") Then
filelist.Add(tableauListe(i).Substring(tableauListe(i).LastIndexOf(" ") + 1))
End If
i += 1
End While
monResultat = listeFinale.ToArray
' Gestion des exceptions
Catch ex As UriFormatException
MessageBox.Show(ex.Message)
Catch ex As WebException
MessageBox.Show(ex.Message)
Finally
' Fermeture des différents flux utilisés
If monResponseStream IsNot Nothing Then
monResponseStream.Close()
End If
If monStreamReader IsNot Nothing Then
monStreamReader.Close()
End If
End Try
Try
For Each setfiles In filelist
publicfile = "http://cloud.olympe.in/remote.php/webdav/srv/" & ComboBox1.SelectedItem & "/" & setfiles
My.Computer.Network.DownloadFile(publicfile, My.Application.Info.DirectoryPath & "\server" & ComboBox1.SelectedItem & "" & setfiles, identifiant, motDePasse, False, 1000000, True, FileIO.UICancelOption.DoNothing)
Next
MsgBox("Données ajoutées !", vbInformation, "Ok")
Catch ex As Exception
MsgBox(ex.Message & " sur << " & publicfile & ">>", MsgBoxStyle.YesNo, "Echec")
End
End Try
Return monResultat
End Function
J'ai essayé sur mes deux serveur mais impossible de récupérer quoi que ce soit.(et aucune MSGBOX pour me dire qu'il y a une erreur...)
Ca fonctionne bien mais attention, le protocole FTP est sensible à la case, le fichier se nomme "toto.zip" si tu mets "Toto.zip" ça ne fonctionnera pas.
Il faut aussi bien vérifier le chemin du serveur (dans un sous-dossier ou non etc...)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 avril 2013 à 14:03
Salut
Ce qui m'épate dans ton code, tictac, c'est que, après cette ligne
Dim listeBrute As String = monStreamReader.ReadToEnd
tu ne fasses aucun test sur l'objet pour être sûr que les données sont toutes arrivées.
Un StreamReader peut être asynchrone, donc il doit y avoir un moyen de tester si le flux sous-jacent a bien tout récupéré.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Bon j'ai remis exactement le même code dans mon appli et rebelotte, fichier vide....
J'ai l'impression qu'il faut que je tape moi même le chemin du fichier...pas pratique...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Sur un doute j'ai inserer une 2eme form sur mon project et je l'affiche après la verification des fichier et...RIEN, donc mon problème viens du listage des fichier de mon dossier.