2010-05-27 3 views
0

J'ai essayé de ftp un fichier dtl de .net à, ce que je crois, est un AS400. L'erreur qui m'a été signalée est: "Une ou plusieurs lignes ont été tronquées" et l'administrateur dit que le fichier arrive avec 256 lignes qui ont des colonnes de longueur variable. J'ai trouvé cette explication en ligne:Comment définir la LRECL dans C# .NET?

nous devons établir des valeurs par défaut parce qu'il n'y a pas de détails sur le fichier existent. Le RECFM par défaut est V et LRECL est 256. Cela signifie que SAS va scanner l'enregistrement d'entrée à la recherche du CR & LF pour nous dire que nous sommes à l'EOR. Si le marqueur n'est pas trouvé dans la limite de la LRECL, SAS rejette les données de la valeur LRECL à la fin de l'enregistrement et ajoute un message au journal indiquant qu'une ou plusieurs lignes ont été tronquées.

J'ai donc besoin de définir la LRECL. Comment faire cela en C# .NET?

  FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath); 
      ftp.Credentials = new NetworkCredential(user, pwd); 

      ftp.KeepAlive = false; 
      ftp.UseBinary = false; 
      ftp.Method = WebRequestMethods.Ftp.UploadFile; 

      FileStream fs = File.OpenRead(inputfilepath + ftpfileName); 
      byte[] buffer = new byte[fs.Length]; 
      fs.Read(buffer, 0, buffer.Length); 
      fs.Close(); 

      Stream ftpstream = ftp.GetRequestStream(); 

      int i = 0; 
      int intBlock = 1786; 
      int intBuffLeft = buffer.Length; 

      while (i < buffer.Length) 
      { 
       if (intBuffLeft >= 1786) 
       { 
        ftpstream.Write(buffer, i, intBlock); 
       } 
       else 
       { 
        ftpstream.Write(buffer, i, intBuffLeft); 
       } 
       i += intBlock; 
       intBuffLeft -= 1786; 
      } 
      ftpstream.Close(); 
+0

Utilisez-vous ftpwebrequestto effectuer votre transfert? L'avez-vous configuré pour transférer en tant que binaire ou texte? Avez-vous du code à nous montrer? – ChrisBD

Répondre

0

1786 est non divisible par 256.

Je ne pensais pas que vous aviez besoin de flux segmenter le contenu avec FtpWebRequest.

Avez-vous essayé

StreamReader sourceStream = new StreamReader(fileName); 
byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
sourceStream.Close(); 

ftp.ContentLength = fileContents.Length; 
Stream ftpstream = ftp.GetRequestStream(); 
ftpstream.Write(fileContents, 0, fileContents.Length); 
ftpstream.Close(); 
Questions connexes