如何在C#.NET中设置LRECL?

时间:2010-05-27 13:35:17

标签: c# ftp

我一直在尝试将.net中的dtl文件ftp转换为我认为的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 :(得分:0)

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