2015-01-25 4 views
1

Я пытаюсь загрузить файл usng FTP в консольном приложении C#, но даже если я сейчас правильно верю, я всегда получаю сообщение об ошибке «550 file not found».C# single file FTP загрузить

Есть ли способ вернуть текущий путь (после подключения к серверу)?

// lade datei von FTP server 
     string ftpfullpath = "ftp://" + Properties.Settings.Default.FTP_Server + Properties.Settings.Default.FTP_Pfad + "/" + Properties.Settings.Default.FTP_Dateiname; 
     Console.WriteLine("Starte Download von: " + ftpfullpath); 
     using (WebClient request = new WebClient()) 
     { 
      request.Credentials = new NetworkCredential(Properties.Settings.Default.FTP_User, Properties.Settings.Default.FTP_Passwort); 
      byte[] fileData = request.DownloadData(ftpfullpath); 

      using (FileStream file = File.Create(@path + "/tmp/" + Properties.Settings.Default.FTP_Dateiname)) 
      { 
       file.Write(fileData, 0, fileData.Length); 
       file.Close(); 
      } 
      Console.WriteLine("Download abgeschlossen!"); 
     } 

EDIT Моя ошибка. Исправлен путь к файлу, по-прежнему получающий ту же ошибку. Но если я подключаюсь к FileZilla, это точный путь к файлу.

ответ

1

Ищет решение, используя System.Net.FtpClient (https://netftp.codeplex.com/releases/view/95632) и используя следующий код.

// aktueller pfad 
     string apppath = Directory.GetCurrentDirectory(); 

     Console.WriteLine("Bereite Download von FTP Server vor!"); 

     using (var ftpClient = new FtpClient()) 
     { 
      ftpClient.Host = Properties.Settings.Default.FTP_Server; 
      ftpClient.Credentials = new NetworkCredential(Properties.Settings.Default.FTP_User, Properties.Settings.Default.FTP_Passwort); 
      var destinationDirectory = apppath + "\\Input"; 

      ftpClient.Connect(); 

      var destinationPath = string.Format(@"{0}\{1}", destinationDirectory, Properties.Settings.Default.FTP_Dateiname); 
      Console.WriteLine("Starte Download von " + Properties.Settings.Default.FTP_Dateiname + " nach " + destinationPath); 
      using (var ftpStream = ftpClient.OpenRead(Properties.Settings.Default.FTP_Pfad + "/" + Properties.Settings.Default.FTP_Dateiname)) 
      using (var fileStream = File.Create(destinationPath , (int)ftpStream.Length)) 
      { 
       var buffer = new byte[8 * 1024]; 
       int count; 
       while ((count = ftpStream.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        fileStream.Write(buffer, 0, count); 
       } 
      } 
     } 
0

Я думаю, что ваше имя не соответствует действительности. Ваша первая строка записывает другое имя, чем то, что вы установили в ftpfullpath. Вы используете FTP_Dateiname в первой строке, но FTP_Pfad, когда вы устанавливаете ftpfullpath.

Чтобы увидеть, что на самом деле происходит переместить первую строку после 'строки ftpfullpath ...')

и изменить его на Console.WriteLine ("овка Скачать VON:" + ftpfullpath);

+0

Исправлено. См. Выше. Еще одна ошибка. Спасибо, что указали на ошибку, проработав несколько часов, различные решения, которые я нашел в Интернете, но всегда с тем же результатом ... –

+0

Я предполагаю, что вы не пропустили FTP-сервер после/после? (Я предполагаю, что FTP_Pfad - это каталог?) – Tim

+0

Другая возможность заключается в том, что вы используете другой пользователь/пароль и получаете другой корневой каталог на ftp-сервере. – Tim