2009-12-18 15 views
1

J'ai besoin de télécharger des fichiers via ftp à partir d'un ancien serveur AS/400. Mon code ressemble plus ou moins comme:FtpWebRequest Connexion à un AS/400

FtpWebRequest _request = (FtpWebRequest)WebRequest.Create("ftp://ftpaddress/FOO.CSV"); 
_request.Credentials = new NetworkCredential(_ftpUsername, _ftpPassword); 
_request.Method = WebRequestMethods.Ftp.DownloadFile; 
FtpWebResponse response = (FtpWebResponse)_request.GetResponse(); 

Toutefois, une exception est levée avec le message:

501 Character (/) not allowed in object name. 

Je devine que l'AS400 utilise un séparateur de chemin différent de celui/mais je ne peux t comprendre comment exprimer l'uri d'une manière (1) FtpWebRequest accepte et (2) l'AS400 comprend.

Quelqu'un d'autre a rencontré cela?

Répondre

2

Selon this page, fwd slash est le séparateur de chemin:

La barre oblique est le caractère de séparation pour les chemins envoyés au serveur FTP.

Un similar conversation sur au forums de Microsoft (2005 ère) indique qu'il est un bogue dans FtpWebRequest:

Actuellement FtpWebRequest ne supporte pas les devis et je ne peux pas penser à une façon que vous serez en mesure de overide la méthode sans exposer notre codeMariya Atanasova [NCL] MSFT, Modérateur, nov 2005

mise à jour Essayez de versions les plus récentes ou essayez une bibliothèque différente; le fil de discussion MS a plusieurs.

2

J'ai souvent reçu ce message par le passé, et cela signifiait que j'avais oublié de changer le format du nom.

Il existe deux formats de nom possible lorsque vous faites FTP avec un AS400, et il peut être modifié avec la commande FTP NAMEFMT:

0 est pour les fichiers système de bibliothèque (bibliothèque \ filename.member)

1 est pour les fichiers dans l'IFS, où un fichier CSV serait

par défaut, il est réglé sur 0.

Modifier à 1 et il devrait fonctionner. Cependant je ne suis pas sûr comment il peut être changé avec un FtpWebRequest.

+0

C'est probablement le problème. Par défaut, vous naviguez dans les bibliothèques et les fichiers. Passer à 'namefmt 1' navigue dans l'IFS où je suppose que votre fichier CSV réside. –

0

Pour vous faciliter la vie, le serveur FTP décide du format de nom que vous souhaitez utiliser, en fonction de votre première commande. Si vous commencez par "cd/home", le serveur FTP définit automatiquement NAMEFMT sur 1 pour vous. En effet, vous pouvez le modifier manuellement pendant votre session avec la commande FTP distante NAMEFMT. S'il vous plaît, notez que vous n'avez pas besoin de la (ancienne) méthode iSeries. Vous pouvez adresser TOUS les objets sur l'iSeries avec NAMEFMT 1. Par exemple, "get/QSYS.LIB/MYLIBRARY.LIB/MYFILE.FILE/MYMEMBER.MBR" fera l'affaire pour n'importe quelle table de base de données iSeries. Même pour les fichiers multimembres!