Цель:FtpWebRequest: Создание вложенных каталогов (локальных против дистанционного управления)
Я хочу, чтобы убедиться, что FTP путь существует перед загрузкой файлов, если не ==> создать его.
код я использую:
Dim ftpPath As String = "ftp://----------/ParentDir/SubFolder1/SubFolder2"
If Not FTPDirExists(ftpPath) Then
CreateFTPDir(ftpPath)
End If
Где CreateFTPDir
является:
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
Теперь, когда я проверить этот код на моем локальном сервере FTP (созданного с помощью FileZilla), он создает путь, независимо от количества вложенных каталогов. , но, когда я использую его на самом удаленном FTP-сервере, он выдает следующее исключение: The remote server returned an error: (550) File unavailable
, если каталог ectories для создания более одного.
Мой вопрос Почему эта проблема не возникает с локальным сервером? и мне нужно создать каждый вложенный каталог отдельно на удаленном сервере?
Дополнительная информация + второй вопрос:
Это FTPDirExists
функция Я использую (лучшее, что я мог придумать после долгих поисков):
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
Это не на 100% точно, как я упомянул в комментарии выше, поэтому, пожалуйста, дайте мне знать, если у вас есть более точный метод.