První věc: pokud děláte více dotazů na stejnou adresu pak doporučuju mít proměnou s heslem, uživ. jménem a hostingem když potřebujete měnit stačí to na jednom místě problém vašeho kódu je jednoduchý, dám příklad,. máme adresář ftp://server.dev/test ve složce test jsou sobory
. '' odkaz na sebe
.. '' odkaz na nadřazenou složku
test.txt
test2.txt
test3.cmd
problémem je že si do listu SeznamSouboru dáváte název souboru přímo tak jak vám to vrátí ten požadavek ale vůbec vlastně neřešíte co vám vrací ?! to co vy jste přidával
SeznamSouboru.Add(Str1)
vám vrátí
test/.
test/..
test/test.txt
test/test2.txt
test/test3.cmd
takže vám tam pak vznikne cesta ftp://server.dev/test/test/. . . . ftp://server.dev/test/test/test3.cmd ale ta přece neexistuje,. a pak vám server vrátí "500 not found"
Dim pass As String = "password"
Dim uid As String = "Username"
Dim ftpPath As String = "ftp://server.dev/test"
Dim SeznamSouboru As New Collections.Generic.List(Of String)
Dim Ftp1 As FtpWebRequest = WebRequest.Create(ftpPath)
Ftp1.Credentials = New NetworkCredential(uid, pass)
Ftp1.KeepAlive = False
Ftp1.Method = WebRequestMethods.Ftp.ListDirectory
Using Response1 As FtpWebResponse = CType(Ftp1.GetResponse, FtpWebResponse)
Using Reader1 As New IO.StreamReader(Response1.GetResponseStream(), System.Text.Encoding.Default)
Dim Pole() As String = Reader1.ReadToEnd().Split(vbNewLine)
For Each Str1 As String In Pole
SeznamSouboru.Add(Str1.Split("/")(Str1.Split("/").Length - 1).Trim()) ''řešení !!!
Next
End Using
End Using
' Poté procházím v kolekci 'SeznamSouboru' soubor po souboru ...
For Each Soubor As String In SeznamSouboru
' Najprve si každý soubor jednotlivě přečtu ...
If Soubor.EndsWith(".txt") = True Then
Dim Ftp2 As FtpWebRequest = WebRequest.Create(ftpPath + "/" + Soubor) ''řešení !!!
Ftp2.Credentials = New NetworkCredential(uid, pass)
Ftp2.KeepAlive = False
Ftp2.Method = WebRequestMethods.Ftp.DownloadFile
Using Response2 As FtpWebResponse = CType(Ftp2.GetResponse, FtpWebResponse)
Using Reader2 As New IO.StreamReader(Response2.GetResponseStream(), System.Text.Encoding.Default)
' Nějaké akce
End Using
End Using
' A poté se jej snažím přejmenovat, abych ho příště nečetl znovu
Dim Ftp3 As FtpWebRequest = WebRequest.Create(ftpPath + "/" + Soubor)
Ftp3.Credentials = New NetworkCredential(uid, pass)
Ftp3.Method = WebRequestMethods.Ftp.Rename
Ftp3.KeepAlive = True
Ftp3.RenameTo = Soubor & ".completed"
Using Response3 As FtpWebResponse = DirectCast(Ftp3.GetResponse, FtpWebResponse)
End Using
End If
Next
|