2012-01-18 5 views
0

Я пытаюсь загрузить каталог, используя FTP в приложении C#. Мне в основном нужно взять удаленный каталог и переместить его, а его содержимое в локальный каталог.C# - Скачать каталог - FTP

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

private void Download(string file, string destination) 
    {      
     try 
     { 
      string getDir = "ftp://" + ftpServerIP + ftpPath + file + "/"; 
      string putDir = destination + "\\" + file; 

      Debug.WriteLine("GET: " + getDir); 
      Debug.WriteLine("PUT: " + putDir); 

      FtpWebRequest reqFTP;     

      reqFTP = (FtpWebRequest)FtpWebRequest.Create 
       (new Uri(getDir)); 

      reqFTP.Credentials = new NetworkCredential(ftpUserID, 
                 ftpPassword); 
      reqFTP.UseBinary = true; 

      reqFTP.KeepAlive = false;     
      reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;         
      reqFTP.Proxy = null;     
      reqFTP.UsePassive = false; 
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 
      Stream responseStream = response.GetResponseStream(); 
      FileStream writeStream = new FileStream(putDir, FileMode.Create);     
      int Length = 2048; 
      Byte[] buffer = new Byte[Length]; 
      int bytesRead = responseStream.Read(buffer, 0, Length);    
      while (bytesRead > 0) 
      { 
       writeStream.Write(buffer, 0, bytesRead); 
       bytesRead = responseStream.Read(buffer, 0, Length); 
      }     
      writeStream.Close(); 
      response.Close(); 
     } 
     catch (WebException wEx) 
     { 
      MessageBox.Show(wEx.Message, "Download Error"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Download Error"); 
     } 
    } 

Debug:

GET: ftp://I.P.ADDR/SOME_DIR.com/members/forms/THE_FOLDER_TO_GET/ 
PUT: C:\Users\Public\Documents\iMacros\Macros\THE_FOLDER_TO_WRITE 
A first chance exception of type 'System.Net.WebException' occurred in System.dll 

MessageBox Выход:

The requested URI is invalid for this FTP command. 
+0

Существует ли целевой каталог на FTP-сервере? Имеет ли пользователь, которому вы пользуетесь, правильные разрешения? – Oded

+0

@Oded: Он делает, и пользователь делает это. Я ранее перечислял каталог и создавал CheckedListBox каталогов в качестве параметров. Я также могу использовать FileZilla для ручного получения данных. – Josh

ответ

3

слеш на конце getDir указывает каталог - можете ли вы использовать mget и пройти путь, который заканчивается на «/ *»?

+0

Я не уверен, что вы подразумеваете под 'mget', но добавление * в конец запроса не исправляет его. – Josh

+1

Извините, я думал о командной строке FTP, где mget - это команда для получения нескольких файлов. Похоже, в WebRequestMethods.Ftp нет эквивалента. Как насчет использования метода ListDirectory, чтобы получить листинг, а затем зацикливать? – upsidedowncreature

+0

Я принял ваш ответ, потому что 'mget' дал мне идею перечисления содержимого dir и зацикливания, хотя их по очереди получал. – Josh

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