.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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д