2017-01-05 4 views
1

У меня проблема с загрузкой по FTP, и я надеюсь, что вы можете мне помочь. Я пытаюсь создать папки, а затем загружать файлы в них. То, что моя программа должна делать, это проверить, существует ли папка, а если нет, создайте новую с именем, которое было проверено ранее. Программа работает нормально, за исключением ошибки, описанной ниже.Проверить наличие файла/подкаталога с помощью VB.NET с помощью FTpWebRequest

Моя проблема:
Я хочу загрузить папку под названием ghandle -> работает по назначению.
После этого, я хочу, чтобы загрузить папку handle -> не работает, потому что .Contains метод, который проверяет папки на сервере FTP, находит ghandle и останавливается, потому что ghandle содержит handle.

Есть ли другие варианты, такие как .Contains, который будет просто проверять целые слова или точные совпадения?

Вот мой исходный код:

Dim dirname = Path.GetFileNameWithoutExtension(openFileDialogHtml.FileName) & "_files"  
Dim ftp = "ftp://" & ftp_address.Text & "/" 
Dim user = ftp_user.Text 
Dim pass = ftp_password.Text 

Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create(ftp) 
Dim creds As Net.NetworkCredential = New Net.NetworkCredential(user, pass) 
request.Credentials = creds 

Dim resp As Net.FtpWebResponse = Nothing 
request.Method = Net.WebRequestMethods.Ftp.ListDirectoryDetails 
request.KeepAlive = True 
Using resp 
    resp = request.GetResponse() 
    Dim sr As StreamReader = New StreamReader(resp.GetResponseStream(), System.Text.Encoding.ASCII) 
    Dim s As String = sr.ReadToEnd() 
    If Not s.Contains(dirname) Then 
     request = Net.FtpWebRequest.Create(ftp & dirname) 
     request.Credentials = creds 
     request.Method = Net.WebRequestMethods.Ftp.MakeDirectory 
     resp = request.GetResponse() 
     MsgBox("Created folder " & dirname) 
    Else 
     MsgBox("Folder " & dirname & " already exists!") 
    End If 
End Using 

Заранее спасибо

ответ

0

Во-первых, использовать ListDirectory, не ListDirectoryDetails. ListDirectory возвращает только простые имена, чего достаточно для вашей цели и легко разобрать.

Тогда просто разделить вывод на массив отдельных имен файлов, используя String.Split method:

Dim names As String() = 
    sr.ReadToEnd().Split(New Char() {vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries) 

и использовать IEnumerable.Contains extension method для проверки данного имени файла:

If Not names.Contains(dirname) Then 
Смежные вопросы