Ziel:FtpWebRequest: verschachtelten Verzeichnissen (lokale vs remote) create
Ich möchte sicherstellen, dass FTP-Pfad-Dateien vor dem Hochladen existiert, wenn nicht ==> es schaffen.
-Code Ich verwende:
Dim ftpPath As String = "ftp://----------/ParentDir/SubFolder1/SubFolder2"
If Not FTPDirExists(ftpPath) Then
CreateFTPDir(ftpPath)
End If
Wo CreateFTPDir
ist:
Private Sub CreateFTPDir(DirPath As String)
Dim request As FtpWebRequest = FtpWebRequest.Create(DirPath)
request.Credentials = New NetworkCredential("UserName", "Password")
request.Method = WebRequestMethods.Ftp.MakeDirectory
request.Proxy = Nothing
request.KeepAlive = True
Try
Dim resp As FtpWebResponse = request.GetResponse()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Nun, wenn ich diesen Code auf meinem lokalen FTP-Server zu testen (mit FileZilla erstellt), schafft der Pfad egal die Anzahl der verschachtelten Verzeichnisse .. aber Wenn ich es auf dem tatsächlichen (remote) FTP-Server verwenden, löst es die folgende Ausnahme aus: The remote server returned an error: (550) File unavailable
, wenn die Richt Die zu erstellenden Objekte sind mehr als eins.
Meine Frage ist, warum tritt dieses Problem nicht mit dem lokalen Server auf? und muss ich jedes verschachtelte Verzeichnis separat auf dem Remote-Server erstellen?
Zusatzinfo + 2. Frage:
Dies ist die FTPDirExists
Funktion Ich verwende (das beste, das ich mit nach viel Suche einfiel):
Private Function FTPDirExists(DirPath As String) As Boolean
DirPath &= If(DirPath.EndsWith("/"), "", "/")
Dim request As FtpWebRequest = FtpWebRequest.Create(DirPath)
request.Credentials = New NetworkCredential("UserName", "Password")
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails
request.Proxy = Nothing
request.KeepAlive = True
Try
Using resp As FtpWebResponse = request.GetResponse()
Return True
End Using
Catch ex As WebException
Dim resp As FtpWebResponse = DirectCast(ex.Response, FtpWebResponse)
If resp.StatusCode = FtpStatusCode.ActionNotTakenFileUnavailable Then
Return False ' ==> Unfortunately will return false for other reasons (like no permission).
Else
Return False ' ==> Don't bother about this.
End If
End Try
End Function
Es ist nicht 100% korrekt, wie ich oben im Kommentar erwähnt habe. Bitte lassen Sie mich wissen, wenn Sie eine genauere Methode haben.