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

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

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

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

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

textual
Листинг программы
MustInherit Class FtpObjectInfo
 
    Public Property FullName As String
    Public Property Name As String
    Public Property LastWriteTime As DateTime
 
End Class
 
Class FtpDirectoryInfo
    Inherits FtpObjectInfo
End Class
 
Class FtpFileInfo
    Inherits FtpObjectInfo
 
    Public Property Length As Long
 
End Class
 
Public Class Ftp
 
    Public Shared Function GetFiles(address As String) As FtpFileInfo()
        Return GetDirectoriesAndFiles(address).OfType(Of FtpFileInfo)().ToArray()
    End Function
 
    Public Shared Function GetDirectories(address As String) As FtpDirectoryInfo()
        Return GetDirectoriesAndFiles(address).OfType(Of FtpDirectoryInfo)().ToArray()
    End Function
 
    Public Shared Function GetDirectoriesAndFiles(address As String) As FtpObjectInfo()
    
        If Not address.EndsWith("/") Then address &= "/"
    
        Dim objects As New List(Of FtpObjectInfo)
        Dim request As FtpWebRequest = WebRequest.Create(address)
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails
        request.Credentials = new NetworkCredential ("anonymous","anonymous@anonymous.com")
            
        Using response As FtpWebResponse = request.GetResponse()
            Using responseStream As Stream = response.GetResponseStream()
                Using reader As New StreamReader(responseStream)
                    
                    Do While reader.Peek() >= 0
                        Dim responseLine() As String = reader.ReadLine().Split({" "}, StringSplitOptions.RemoveEmptyEntries)
                        
                        Dim itemName As String = responseLine(8)
                        
                        Dim itemDate As DateTime
                        If responseLine(7).Contains(":")
                            itemDate = DateTime.ParseExact(responseLine(5) & " " & responseLine(6) & " " & DateTime.Now.Year & " " & responseLine(7), "MMM d yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)
                        Else
                            itemDate = DateTime.ParseExact(responseLine(5) & " " & responseLine(6) & " " & responseLine(7), "MMM d yyyy", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)
                        End If
                        
                        If responseLine(0).StartsWith("d") Then
                            objects.Add(New FtpDirectoryInfo With { _
                                .FullName = address + itemName + "/", _
                                .Name = itemName, _
                                .LastWriteTime = itemDate _
                            })
                        Else
                            Dim itemLength As Long = Long.Parse(responseLine(4))
                            objects.Add(New FtpFileInfo With { _
                                .FullName = address + itemName, _
                                .Name = itemName, _
                                .LastWriteTime = itemDate, _
                                .Length = itemLength _
                            })
                        End If
                    Loop
                End Using
            End Using
        End Using
        
        Return objects.ToArray()
    
    End Function
    
End Class

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


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

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

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