Vérifier la présence d'un fichier local sur un ftp [Résolu]

raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - 26 nov. 2014 à 18:20 - Dernière réponse : raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention
- 27 nov. 2014 à 11:51
Bonjour,
Avec mon code ça fonctionne par contre dès qu'il trouve un fichier absent sur le ftp tout les fichiers en local qui suivent sont vu comme absent même si ce n'est pas le cas jusqu'au dernier fichier testé.


Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(localpath)
For Each fi As System.IO.FileInfo In di.GetFiles
BackgroundWorker3.ReportProgress(0, fi.ToString & " en test...")
Threading.Thread.Sleep(10)
Dim monCheck As String = fi.ToString
Dim request As FtpWebRequest = WebRequest.Create(baseUri1 & "/" & monCheck)
request.Credentials = New NetworkCredential(Login, Password)
request.Method = WebRequestMethods.Ftp.GetFileSize
Dim response As FtpWebResponse
response = Nothing
Try
response = request.GetResponse()
'Dim MaRep = response.ContentLength
'MsgBox(MaRep)
' THE FILE EXISTS
response.Close()

Catch ex As WebException
Dim errorResponse As FtpWebResponse = ex.Response
If FtpStatusCode.ActionNotTakenFileUnavailable = errorResponse.StatusCode Then
' THE FILE DOES NOT EXIST
BackgroundWorker3.ReportProgress(0, monCheck & " en trop...")
MsgBox(localpath & monCheck & vbLf & "Va être supprimé !!!")
'My.Computer.FileSystem.DeleteFile(localpath & monCheck)
fi = Nothing

End If
ex = Nothing
Finally
request.Abort()
request = Nothing

End Try

monCheck = ""
Next

Merci par avance pour vos lumières...
Afficher la suite 

11 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 26 nov. 2014 à 19:05
0
Merci
Bonjour,
à lire attentivement :
http://msdn.microsoft.com/en-us/library/fk6t46tz.aspx
s'attarder sur les conséquences de ce que tu as écrit dans "Finally", qui intervient toujours (exception ou pas).
raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - 26 nov. 2014 à 20:10
oui mais peu importe même si je le retire ça ne change pas
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 26 nov. 2014 à 21:09
0
Merci
Bonjour
mets ton BackgroundWorker3.ReportProgress(0, fi.ToString & " en test...") en commentaires
et lance avec le debugger pour analyser ce qui se passe
raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - 26 nov. 2014 à 22:06
0
Merci
j'ai le même résultat
raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - 26 nov. 2014 à 22:57
0
Merci
Ce qui se passe c'est que le ftp retourne une erreur 550 au premier fichier non trouvé et qu'ensuite pour tout les autres fichiers, qu'ils existent ou pas sur le ftp, une erreur 550
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 26 nov. 2014 à 23:50
0
Merci
d'accord mets un point d'arrêt à la ligne
Dim errorResponse As FtpWebResponse = ex.Response


lance ton prog,il va s'arreter avec erreur ftp 550
continue pas à pas F11

au faite pourquoi cette ligne ?
 fi = Nothing
raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - 27 nov. 2014 à 00:23
0
Merci
en fait je crois qu'a la première connexion je suis en binary mode ensuite ça passe en ACSII mode car j'ai ce message quand il veut check au fichier suivant
550 SIZE not allowed in ASCII mode
raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - 27 nov. 2014 à 00:30
0
Merci
le fi = Nothing ne sert pas a grand chose, je l'ai supprimé
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 27 nov. 2014 à 10:27
0
Merci
c'est mieux d'écrire une fonction qui verifie la présence du fichier
et appeler cette fonction dans une boucle

Public Function CheckIfFtpFileExists(ByVal fileUri As String) As Boolean
Dim request As FtpWebRequest = WebRequest.Create(fileUri)
request.Credentials = New NetworkCredential("username", "password")
request.Method = WebRequestMethods.Ftp.GetFileSize
Try
Dim response As FtpWebResponse = request.GetResponse()
' THE FILE EXISTS
Catch ex As WebException
Dim response As FtpWebResponse = ex.Response
If FtpStatusCode.ActionNotTakenFileUnavailable = response.StatusCode Then
' THE FILE DOES NOT EXIST
Return False
End If
End Try
Return True

end function


Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(localpath)
Dim monCheck As String
For Each fi As System.IO.FileInfo In di.GetFiles
monCheck = fi.ToString
if not CheckIfFtpFileExists(baseUri1 & "/" & monCheck) then
messagebox.show("file will be deleted")
end if



basé sur ce site
http://www.codeproject.com/Tips/163632/How-to-check-if-a-file-exists-on-an-FTP-server
raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - 27 nov. 2014 à 11:51
oui je faisais avec cette source mais le problème vient du ftp qui ne tolère pas.
Merci pour vos réponses
raynald31 31 Messages postés mercredi 9 mars 2005Date d'inscription 27 novembre 2014 Dernière intervention - Modifié par raynald31 le 27/11/2014 à 10:34
0
Merci
finalement j'ai changé de méthode en listant le contenu du local et du ftp et avec un boolean je passe a true si il y a une concordance.
Finalement bien plus simple...


Private Shared Function GetDirectoryListing(uri As String, credentials As ICredentials) As IList(Of String)
Dim entries As New List(Of String)()
Dim request = DirectCast(WebRequest.Create(uri), FtpWebRequest)
If credentials IsNot Nothing Then
request.Credentials = credentials
End If
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails

Using response = DirectCast(request.GetResponse(), FtpWebResponse),
stream = response.GetResponseStream(),
reader = New StreamReader(stream)

Dim line As String = reader.ReadLine()
While line IsNot Nothing
entries.Add(line)
line = reader.ReadLine()
End While
Return entries

End Using

End Function



Dim wc As New WebClient()
wc.Credentials = New NetworkCredential(Login, Password)
Dim baseUri1 = "ftp://monftp....."
Dim fileNames1 = GetDirectoryListing(baseUri1, wc.Credentials)

Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(localpath)
For Each fi As System.IO.FileInfo In di.GetFiles
BackgroundWorker3.ReportProgress(0, fi.ToString & " en test...")
Threading.Thread.Sleep(100)
Dim monCheck As String = fi.ToString
Dim checkOk As Boolean = False
For Each fileName In fileNames1

If (fileName.StartsWith("-")) Then
Dim Monsplit1 = Split(fileName, " ")(UBound(Split(fileName, " ")))
If monCheck = Monsplit1 Then
checkOk = True
End If
End If
Next
If checkOk = True Then
BackgroundWorker3.ReportProgress(0, monCheck & " est OK")
Else
BackgroundWorker3.ReportProgress(0, monCheck & " en trop...")
'MsgBox(localpath & monCheck & vbLf & "Va être supprimé !!!")
My.Computer.FileSystem.DeleteFile(localpath & monCheck)
Threading.Thread.Sleep(100)
End If
Next

End Sub

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.