2017-02-12 2 views
2

Я хотел бы удалить все файлы на FTP-сервере, имена которых содержат определенную строку.Удалить файлы FTP с именем, содержащим строку (соответствующую маску)

Например, у меня есть эти файлы на FTP:

pippo_1.jpg 
pippo_2.jpg 
pippo_3.jpg 
pluto_1.jpg 

Я хотел бы удалить все файлы, которые содержат pippo.

Как удалить все эти файлы за одну операцию?

Спасибо!

ответ

2

Реализация протокола FTP в среде .NET не допускает этого в одной операции.

Вы должны указать удаленный каталог, отфильтровать файлы, которые хотите удалить, и удалить их по одному.


Если вы действительно хотите сделать это в одной операции, вы должны использовать 3rd библиотеку партии, которая поддерживает операции с масками файлов. Например WinSCP .NET assembly это позволяет с его Session.RemoveFiles method:

Dim sessionOptions As New SessionOptions 
With sessionOptions 
    .Protocol = Protocol.Ftp 
    .HostName = "ftp.example.com" 
    .UserName = "username" 
    .Password = "password" 
End With 

Using session As New Session 
    session.Open(sessionOptions) 
    session.RemoveFiles("/remote/path/pippo*").Check() 
End Using 

(я автор WinSCP)


Если вы не хотите использовать 3rd библиотеку партии, сделать, как было предложено выше :

Dim url As String = "ftp://ftp.example.com/remote/path/" 
Dim credentials As NetworkCredential = New NetworkCredential("username", "password") 

Dim listRequest As FtpWebRequest = WebRequest.Create(url) 
listRequest.Method = WebRequestMethods.Ftp.ListDirectory 
listRequest.Credentials = credentials 

Using listResponse As FtpWebResponse = listRequest.GetResponse(), 
     listStream As Stream = listResponse.GetResponseStream(), 
     listReader As StreamReader = New StreamReader(listStream) 
    While Not listReader.EndOfStream 
     Dim filename As String = listReader.ReadLine() 

     If filename.StartsWith("pippo") Then 
      Dim deleteRequest As FtpWebRequest = WebRequest.Create(url + filename) 
      deleteRequest.Method = WebRequestMethods.Ftp.DeleteFile 
      deleteRequest.Credentials = credentials 
      deleteRequest.GetResponse() 
     End If 
    End While 
End Using 
+0

I судимое решение с WinSCP, когда я БЮТ открыть connesion, я получаю эту errore: Ошибка соединения. Ошибка соединения. Все учетные данные верны. Я попытался подключиться к WinSCP.exe, и он отлично работает. Думаю, что проблема связана с протоколом передачи. У вас есть предложение? Спасибо! @MartinPrikryl –

+0

Как вы связываетесь с 'winscp.exe'? Использование скриптов или графического интерфейса? Если скрипты, какую команду вы использовали? Если GUI, какой протокол вы выбрали? У вас может быть GUI WinSCP [генерировать шаблон кода для вас] (https://winscp.net/rus/docs/ui_generateurl#code). –

Смежные вопросы