Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
UBUNTU
209 / 134 / 29
Регистрация: 04.02.2015
Сообщений: 727
#1

Как определить на FTP сервере последний модифицированный файл? - Visual Basic .NET

15.10.2017, 15:03. Просмотров 306. Ответов 15
Метки ftp (Все метки)

Добрый день! Подскажите пожалуйста, как определить на FTP сервере последний модифицированных файл (его дата), то есть самый последний файл который был добавлен по дате.
http://www.cyberforum.ru/vb-net/thread1282428.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2017, 15:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как определить на FTP сервере последний модифицированный файл? (Visual Basic .NET):

Из textbox1 сохранить текст в текстовый файл на ftp сервере
Не подскажете как это реализовать?

Создание файла на FTP - сервере
Здравствуйте.В FAQ нашёл пост о создании папки на FTP-сервере.Можно ли создать...

Вывести список имен в папке на FTP сервере
ага... есть папочка на ФТП с файлами и надо в лист бокс записать все имена...

Как скачать с FTP определенный файл
интиресует вопрос как скачать с FTP определенный файл, и как загрузить на FTP...

Как дописать строку в txt файл на FTP
Есть FTP сервер, на который я хочу реализовать запись лога в файл. Никак не...

15
XIST
1031 / 760 / 107
Регистрация: 01.10.2009
Сообщений: 2,357
Записей в блоге: 1
15.10.2017, 15:22 #2
UBUNTU, получить список файлов с помощью
Код
FtpClient
. Пройти по файлам циклом с определением даты изменения\создания
0
UBUNTU
209 / 134 / 29
Регистрация: 04.02.2015
Сообщений: 727
15.10.2017, 15:37  [ТС] #3
XIST, хорошо, сделал к примеру это, получил даты:

10.03.2017
10.06.2017

Суть в том, как понять какой новее от даты сегодняшней.
0
Замабувараев
319 / 328 / 91
Регистрация: 18.12.2014
Сообщений: 674
Записей в блоге: 1
15.10.2017, 15:44 #4
Цитата Сообщение от UBUNTU Посмотреть сообщение
какой новее от даты сегодняшней
Какая дата больше — та и новее.
0
UBUNTU
209 / 134 / 29
Регистрация: 04.02.2015
Сообщений: 727
15.10.2017, 15:46  [ТС] #5
Замабувараев, XIST,

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Imports System.IO
 
Public Class Form1
 
    Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        Dim request As Net.FtpWebRequest = Net.WebRequest.Create("ftp://")
        request.Credentials = New Net.NetworkCredential("Anonymous", "")
        request.Method = Net.WebRequestMethods.Ftp.ListDirectoryDetails
        Dim response As Net.FtpWebResponse = request.GetResponse()
        Dim responseStream As Stream = response.GetResponseStream()
        Dim reader As StreamReader = New StreamReader(responseStream)
        My.Computer.FileSystem.WriteAllText("D:\Test.txt", reader.ReadToEnd, True)
    End Sub
End Class
Вывод:

drwxrwxrwx 1 user group 0 Oct 6 12:16 .
drwxrwxrwx 1 user group 0 Oct 6 12:16 ..
-rw-rw-rw- 1 user group 42953480 Oct 3 11:26 Firefox Setup 41.0.exe
Это правильно? Как тут выпилить дату?
0
XIST
1031 / 760 / 107
Регистрация: 01.10.2009
Сообщений: 2,357
Записей в блоге: 1
15.10.2017, 15:49 #6
UBUNTU, допустим files массив их. Тогда я вот тут linq увлекся чуток, так например
vb.net
1
Dim fi = files.OrderBy(Function(f) File.GetCreationTime(f))
0
UBUNTU
209 / 134 / 29
Регистрация: 04.02.2015
Сообщений: 727
15.10.2017, 16:38  [ТС] #7
XIST, Не могу сообразить, подскажите пожалуйста листинг кода. Не силен я в net
0
OwenGlendower
Супер-модератор
Эксперт .NET
8748 / 7752 / 3318
Регистрация: 17.03.2014
Сообщений: 15,252
Записей в блоге: 1
15.10.2017, 17:01 #8
UBUNTU, как-то так:
vb.net
1
2
3
4
5
6
Dim ftpFile As FtpFileInfo = Ftp.GetFiles("ftp://ftp.fu-berlin.de/misc/movies/database/") _
    .OrderByDescending(Function(f) f.LastWriteTime) _
    .FirstOrDefault()
If ftpFile IsNot Nothing Then
    Dim name As String = ftpFile.Name
End If
Код класса Ftp взят из темы http://www.cyberforum.ru/vb-net/thread1787115.html#post9414172
1
XIST
1031 / 760 / 107
Регистрация: 01.10.2009
Сообщений: 2,357
Записей в блоге: 1
15.10.2017, 17:02 #9
UBUNTU,
vb.net
1
2
3
4
5
6
7
8
9
Dim ftpRequest As FtpWebRequest
        Dim ftpResponse As FtpWebResponse
        ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails
        ftpResponse = CType(ftpRequest.GetResponse(), FtpWebResponse)
        Dim files As String = ""
        Dim sr As StreamReader = New StreamReader(ftpResponse.GetResponseStream(), System.Text.Encoding.ASCII)
        files = sr.ReadToEnd()
        sr.Close()
        ftpResponse.Close()
0
OwenGlendower
Супер-модератор
Эксперт .NET
8748 / 7752 / 3318
Регистрация: 17.03.2014
Сообщений: 15,252
Записей в блоге: 1
15.10.2017, 17:04 #10
Цитата Сообщение от XIST Посмотреть сообщение
получить список файлов с помощью FtpClient
Что это за класс?
0
UBUNTU
209 / 134 / 29
Регистрация: 04.02.2015
Сообщений: 727
15.10.2017, 18:10  [ТС] #11
OwenGlendower, Спасибо большое. Вопрос, в вашем примере, вернее приведенной ссылке, как уменьшить таймаут запроса, если ссылка не доступна к примеру, происходит ожидание сек. в 10 если не ошибаюсь, потом ошибка связи с сервером тут:

Using response As FtpWebResponse = request.GetResponse()

Как можно уменьшить время ожидания?
0
OwenGlendower
Супер-модератор
Эксперт .NET
8748 / 7752 / 3318
Регистрация: 17.03.2014
Сообщений: 15,252
Записей в блоге: 1
15.10.2017, 18:15 #12
UBUNTU, по идее через свойство Timeout
vb.net
1
2
3
4
5
6
7
        ...
        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")
        request.Timeout = 5 * 1000 ' 5 sec
        ...
0
UBUNTU
209 / 134 / 29
Регистрация: 04.02.2015
Сообщений: 727
15.10.2017, 18:36  [ТС] #13
OwenGlendower, Странно, при именовании файла к примеру "upd 10.02.1.exe", имя файла видит только upd до пробела. Если "upd_10.02.1.exe" тогда нормально.

Добавлено через 18 минут
OwenGlendower, Можно ли в цикле отловить работу этого куска кода:

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
        Public Shared Function GetDirectoriesAndFiles(address As String) As FtpObjectInfo()
            On Error GoTo erx
            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")
            request.Timeout = 1000
            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(":") Then
                                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()
erx:        MsgBox(Err.Description) : End
        End Function
Это отобразить в ProgressBar хотелось бы.
0
OwenGlendower
Супер-модератор
Эксперт .NET
8748 / 7752 / 3318
Регистрация: 17.03.2014
Сообщений: 15,252
Записей в блоге: 1
15.10.2017, 19:17 #14
Цитата Сообщение от UBUNTU Посмотреть сообщение
Странно, при именовании файла к примеру "upd 10.02.1.exe", имя файла видит только upd до пробела. Если "upd_10.02.1.exe" тогда нормально.
Класс незакончен. Такая ситуация там не была учтена. Возможно в твоем случае достаточно будет заменить строку №44 из примера по ссылке на
vb.net
1
Dim responseLine() As String = reader.ReadLine().Split({" "}, 9, StringSplitOptions.RemoveEmptyEntries)
Цитата Сообщение от UBUNTU Посмотреть сообщение
Можно ли в цикле отловить работу этого куска кода:
...
Это отобразить в ProgressBar хотелось бы.
Можно. Например добавив callback метод или событие, но я этим заниматься не буду. Насчет прогресса не забывай что метод не знает сколько файлов находится на ftp и поэтому показать прогресс в стиле "получено N строк из M" не получится.
1
UBUNTU
209 / 134 / 29
Регистрация: 04.02.2015
Сообщений: 727
15.10.2017, 19:30  [ТС] #15
Цитата Сообщение от OwenGlendower Посмотреть сообщение
но я этим заниматься не буду
Да я и не просил. на всем этом огромное спасибо.
0
XIST
1031 / 760 / 107
Регистрация: 01.10.2009
Сообщений: 2,357
Записей в блоге: 1
15.10.2017, 19:46 #16
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Что это за класс?
сам придумал)) думал-то про request
0
15.10.2017, 19:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2017, 19:46
Привет! Вот еще темы с решениями:

Как создать папку и файл на ftp хостинге?
Я попробовал создать с помощью простой функции upload, код ошибки и программы...

Как проверить есть ли файл на FTP или нет
В общем то из названия темы всё понятно, мне нужно сделать условие If...

Как сделать дозапись из TextBox'a в файл *.txt на ftp?
Я использую такой код для сохранения в файл на фтп: Private Sub...

Как через ftp открыть файл на сервере
Есть программа, которая должна открывать файл на сервере, записывать а него...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru