.NET 3.x Рекурсивное скачивание папок на и с FTP в конкретную директорию - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

В общем это должен быть аналог DropBox(но не общедоступный, для себя). Сервер есть, и достаточно мощьный. Как скачивать и закачивать с и на сервер я знаю. А рекурсивно реализовать не получается... На форуме нашёл много примеров, но подхядащего или объединить их ине не удалось. P.S. А время когда надо что-то обнавлять знаю только как закачать новые файлы на сервер, а мне надо так, что-бы остальные пользователи которые в сети или вошли в сеть позже смогли узнать(автоматически) что надо перезакачать тот файл или удалить.

Решение задачи: «.NET 3.x Рекурсивное скачивание папок на и с FTP в конкретную директорию»

textual
Листинг программы
  1. MustInherit Class FtpObjectInfo
  2.  
  3.     Public Property FullName As String
  4.     Public Property Name As String
  5.     Public Property LastWriteTime As DateTime
  6.  
  7. End Class
  8.  
  9. Class FtpDirectoryInfo
  10.     Inherits FtpObjectInfo
  11. End Class
  12.  
  13. Class FtpFileInfo
  14.     Inherits FtpObjectInfo
  15.  
  16.     Public Property Length As Long
  17.  
  18. End Class
  19.  
  20. Public Class Ftp
  21.  
  22.     Public Shared Function GetFiles(address As String) As FtpFileInfo()
  23.         Return GetDirectoriesAndFiles(address).OfType(Of FtpFileInfo)().ToArray()
  24.     End Function
  25.  
  26.     Public Shared Function GetDirectories(address As String) As FtpDirectoryInfo()
  27.         Return GetDirectoriesAndFiles(address).OfType(Of FtpDirectoryInfo)().ToArray()
  28.     End Function
  29.  
  30.     Public Shared Function GetDirectoriesAndFiles(address As String) As FtpObjectInfo()
  31.    
  32.         If Not address.EndsWith("/") Then address &= "/"
  33.    
  34.         Dim objects As New List(Of FtpObjectInfo)
  35.         Dim request As FtpWebRequest = WebRequest.Create(address)
  36.         request.Method = WebRequestMethods.Ftp.ListDirectoryDetails
  37.         request.Credentials = new NetworkCredential ("anonymous","anonymous@anonymous.com")
  38.            
  39.         Using response As FtpWebResponse = request.GetResponse()
  40.             Using responseStream As Stream = response.GetResponseStream()
  41.                 Using reader As New StreamReader(responseStream)
  42.                    
  43.                     Do While reader.Peek() >= 0
  44.                         Dim responseLine() As String = reader.ReadLine().Split({" "}, StringSplitOptions.RemoveEmptyEntries)
  45.                        
  46.                         Dim itemName As String = responseLine(8)
  47.                        
  48.                         Dim itemDate As DateTime
  49.                         If responseLine(7).Contains(":")
  50.                             itemDate = DateTime.ParseExact(responseLine(5) & " " & responseLine(6) & " " & DateTime.Now.Year & " " & responseLine(7), "MMM d yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)
  51.                         Else
  52.                             itemDate = DateTime.ParseExact(responseLine(5) & " " & responseLine(6) & " " & responseLine(7), "MMM d yyyy", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)
  53.                         End If
  54.                        
  55.                         If responseLine(0).StartsWith("d") Then
  56.                             objects.Add(New FtpDirectoryInfo With { _
  57.                                 .FullName = address + itemName + "/", _
  58.                                 .Name = itemName, _
  59.                                 .LastWriteTime = itemDate _
  60.                             })
  61.                         Else
  62.                             Dim itemLength As Long = Long.Parse(responseLine(4))
  63.                             objects.Add(New FtpFileInfo With { _
  64.                                 .FullName = address + itemName, _
  65.                                 .Name = itemName, _
  66.                                 .LastWriteTime = itemDate, _
  67.                                 .Length = itemLength _
  68.                             })
  69.                         End If
  70.                     Loop
  71.                 End Using
  72.             End Using
  73.         End Using
  74.        
  75.         Return objects.ToArray()
  76.    
  77.     End Function
  78.    
  79. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут