2010-05-05 8 views
4

J'utilise C# dans .NEt 2.0 pour essayer simplement de télécharger un fichier. Tout semble correct dans le code, mais il continue à échouer quand je vais créer un flux à partir de la méthode FtpWebRequest.GetRequestStream.Quel est le problème avec mon code ftp?

Voici le code ...

 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(); 
     } 

Et l'erreur ....

{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

Désolé, le/avant le nom de fichier était présent. Je l'ai accidentellement enlevé en le postant. Mais, quand je cours le code, et il échoue, le/IS là. – donde

+0

Quel est le serveur? Voici une question sur un AS/400 qui peut aider: http://stackoverflow.com/questions/1930787/ftpwebrequest-connecting-to-an-as-400 –

Répondre

4

Cela semble erroné:

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

À moins que le contenu du fichier commence par a / Je pense que vous devez en ajouter un pour que ce soit:

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

Il vous manque un/dans le chemin.

Vous allez créer un chemin qui est ftp://myhostmyfile.txt si votre fichier a été appelé « myfile.txt », que je devine devrait être ftp://myhost/myfile.txt

Par conséquent il suffit d'ajouter un/à la fin de la chaîne ftp://myhost .

+0

+1 Bonne prise là-bas. –

3

La ligne:

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

peut-être un problème si votre variable fileName ne comprend pas les barres obliques nécessaires.

1

Le serveur FTP n'est pas satisfait de la commande STOR générée par .NET. Le meilleur endroit pour regarder est dans le fichier journal pour le serveur. Faire une conjecture sauvage: le chemin est inhabituel, vous voulez typique de spécifier un nom de répertoire (comme ftp://myhost/somedir/filename)

1

Essayez

ftpRequest.UsePassive = false; 

ça marche pour moi.