.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