2010-05-05 4 views
4

Я использую C# в .NEt 2.0, чтобы просто загрузить файл. В коде все выглядит нормально, но он продолжает терпеть неудачу, когда я иду, чтобы создать поток из метода FtpWebRequest.GetRequestStream.Что не так с моим ftp-кодом?

Вот код ...

 FtpWebRequest ftpRequest; 
     FtpWebResponse ftpResponse; 

     try 
     { 
      string fileName = Path.GetFileName(strCompleteFilePath); 
      ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName)); 
      ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; 
      ftpRequest.Proxy = null; 
      ftpRequest.UseBinary = true; 
      ftpRequest.Credentials = new NetworkCredential("myUserID", "myPW"); 
      ftpRequest.KeepAlive = false; 

      FileInfo ff = new FileInfo(strCompleteFilePath); 
      byte[] fileContents = new byte[ff.Length]; 

      using (FileStream fr = ff.OpenRead()) 
      { 
       fr.Read(fileContents, 0, Convert.ToInt32(ff.Length)); 
      } 

      using (Stream writer = ftpRequest.GetRequestStream()) 
      { 
       writer.Write(fileContents, 0, fileContents.Length); 
      } 

      ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); 
     } 

И ошибка ....

{System.Net.WebException: The remote server returned an error: (501) Syntax error in parameters or arguments. 
    at System.Net.FtpWebRequest.SyncRequestCallback(Object obj) 
    at System.Net.FtpWebRequest.RequestCallback(Object obj) 
    at System.Net.CommandStream.InvokeRequestCallback(Object obj) 
    at System.Net.CommandStream.Abort(Exception e) 
    at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage) 
    at System.Net.FtpWebRequest.GetRequestStream() 
+0

К сожалению, перед именем файла WAS существует. Я случайно вынул его, разместив его. Но, когда я запускаю код, и он терпит неудачу,/IS есть. – donde

+0

Что такое сервер? Вот вопрос об AS/400, который может помочь: http://stackoverflow.com/questions/1930787/ftpwebrequest-connecting-to-an-as-400 –

ответ

4

Это выглядит не так:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName)); 

Если содержимое из файла начинается с a / Думаю, вам нужно добавить один из них, чтобы он был таким:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName)); 
5

Вам не хватает/на пути.

Вы собираетесь создать путь, который ftp://myhostmyfile.txt, если ваш файл называется «myfile.txt», который я предполагаю, должен быть ftp://myhost/myfile.txt

Поэтому просто добавьте/в конце строки ftp://myhost ,

+0

+1 Хороший улов. –

3

Линия:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName)); 

Может быть проблемой, если ваша fileName переменная не включает в себя необходимые косой черты.

1

FTP-сервер недоволен командой STOR, которую генерирует .NET. Лучшее место для поиска - в файле журнала для сервера. Принимая дикое предположение: путь необычен, вы типичный хотите указать имя каталога (например, ftp://myhost/somedir/filename)

1

Попробуйте

ftpRequest.UsePassive = false; 

это работает для меня.

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