2010-05-27 21 views
0

我一直在试图从.net ftp一个dtl文件,我相信,是一个AS400。报告给我的错误是:“一行或多行被截断”,管理员说这个文件正在过来,有256行具有可变长度列。我在网上找到这个解释:如何在C#.NET中设置LRECL?

我们必须建立默认值,因为没有关于文件的细节。默认的RECFM是V,LRECL是256.这意味着SAS将扫描输入记录寻找CR & LF,告诉我们我们正在EOR。如果在LRECL的限制范围内找不到标记,SAS会将​​数据从LRECL值丢弃到记录末尾,并向Log中添加一条消息,指出“一条或多条线已被截断”。

所以我需要设置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(); 
+0

?你是否将它设置为二进制或文本传输?你有任何代码向我们展示? – ChrisBD 2010-05-27 14:04:23

回答

0

1786是不是256

整除我不认为你需要分流的内容了的FtpWebRequest。

有您是否使用ftpwebrequestto执行您的转移试图

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