2013-12-11 5 views
0

Я ищу, чтобы загрузить все файлы в ftp в мою локальную папку. Все файлы должны быть удалены в ftp после загрузки на локальный диск.Загрузка списка файлов из ftp в локальную папку с помощью C#?

Из кода ниже

  1. можно скачать только файл с FTP, где я не ожидал

  2. Мне нужно поместить все файлы в папке, но не во имя местного имя файла.

Мой код:

using (WebClient ftpClient = new WebClient()) 
{ 
    ftpClient.Credentials = new System.Net.NetworkCredential("ftpusername", "ftp pass"); 
    ftpClient.DownloadFile("ftp://ftpdetails.com/dec.docx",@"D:\\Mainfolder\test.docx"); 
} 

Из приведенного выше кода, я могу загрузить файл и поместить его в имя файла only..Where У меня есть так много файлов для загрузки с FTP и места это в локальной папке. Все предложения очень благодарны.

+0

См. [Как указать содержимое каталога с FTP в C#?] (Http://stackoverflow.com/questions/3298922/how-to-list-directory-contents-with-ftp-in-c). – CodeCaster

+0

Ваш вопрос слишком широк, и вы не объясняете, с какой конкретной проблемой вы столкнулись. Вы хотите 1) указать содержимое каталога FTP и для каждого файла в списке: 2) скачать, 3) записать локально, 4) удалить из FTP. См. Вопрос, который я связывал как дубликат для шага 1, вы должны уметь отображать остальную часть оттуда. – CodeCaster

ответ

4

Вот пример использования FTPWebResponse, чтобы получить список имен файлов из каталога:

using System; 
using System.IO; 
using System.Net; 
using System.Text; 

namespace Examples.System.Net 
{ 
    public class WebRequestGetExample 
    { 
     public static void Main() 
     { 
      // Get the object used to communicate with the server. 
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.funet.fi/pub/standards/RFC/"); 
      request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 

      // This example assumes the FTP site uses anonymous logon. 
      request.Credentials = new NetworkCredential("anonymous", "[email protected]"); 

      FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

      Stream responseStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(responseStream); 

      while (!reader.EndOfStream) 
      { 
       String filename = reader.ReadLine(); 
       Console.WriteLine(filename); 
       //you now have the file name, you can use it to download this specific file 


      } 

      Console.WriteLine("Directory List Complete, status {0}", response.StatusDescription); 

      reader.Close(); 
      response.Close(); 
     } 
    } 
} 

Вы можете использовать этот список для загрузки каждого файла. Обратите внимание: если у вас есть много загружаемых файлов, вы можете посмотреть в asyncronous downloading, чтобы ускорить работу, но я бы сначала начал эту работу, прежде чем пытаться внедрить любые асинхронные вещи.

+1

Обратите внимание, что «WebRequestMethods.Ftp.ListDirectoryDetails» также возвращает дату и размер файлов. С помощью «WebRequestMethods.Ftp.ListDirectory» вы просто получите имя файла, поэтому нет необходимости разбирать его :-) –

+0

Paul, не могли бы вы привести пример использования этого списка для загрузки файлов? – dragy

1

Я не думаю, что WebClient является действительным FTP-клиентом. Использовать стандартные классы FtpWebRequest и FtpWebResponse.

В противном случае есть несколько бесплатных клиентов C# ftp, которые будут выполнять эту работу.