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