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