Как мне установить LRECL в C # .NET? - PullRequest
0 голосов
/ 27 мая 2010

Я пытался установить ftp файл dtl из .net в AS400. Мне сообщают об ошибке: «Обрезана одна или несколько строк», и администратор говорит, что файл содержит 256 строк, имеющих столбцы переменной длины. Я нашел это объяснение онлайн:

мы должны установить значения по умолчанию, потому что никакой информации о файле не существует. RECFM по умолчанию - V, а LRECL - 256. Это означает, что SAS будет сканировать входную запись в поисках CR & LF, чтобы сообщить нам, что мы находимся в EOR. Если маркер не найден в пределах LRECL, SAS отбрасывает данные от значения LRECL до конца записи и добавляет в журнал сообщение о том, что «одна или несколько строк были усечены».

Так что мне нужно установить LRECL. Как мне сделать это в 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();

1 Ответ

0 голосов
/ 28 мая 2010

1786 не делится на 256.

Я не думал, что вам нужно разделить содержимое потока с помощью ftpWebRequest.

Вы пробовали

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...