我们目前有一个*.BAT文件,其中包含一些FTP命令,用于从AS400下载文件并保存到TEXT文件中。BAT运行良好,文本文件将依次显示下载文件中的记录。
现在,我们想去掉这个*.BAT文件,并使用C#为我们下载该文件并保存到文本文件中。现在的问题是,我们得到的文件包含一行字符串中的所有记录!它们不再列在彼此之下。
这是我们正在使用的代码:
tpWebRequest request = default(FtpWebRequest);
FtpWebResponse response = default(FtpWebResponse);
StreamWriter writer = default(StreamWriter);
request = WebRequest.Create("*******URL******") as FtpWebRequest;
request.Credentials = new NetworkCredential("user", "pass");
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.UseBinary = true;
response = request.GetResponse() as FtpWebResponse;
writer = new StreamWriter(Server.MapPath("/filename.txt"));
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(37))) //37 for IBM encoding
{
writer.WriteLine(reader.ReadToEnd());
}
writer.Close();
response.Close();
知道我们为什么要得到这个吗?为什么简单的DOS FTP命令比我们的代码工作得更好?
非常感谢!:)
ASCII模式将在下载物理文件时添加记录分隔符。这是大多数ftp客户端的默认传输模式。
request.UseBinary = false;
指定false会导致FtpWebRequest向服务器发送"Type a"命令。
数据传输方法
传输QSYS.LIB文件
问题可能很简单:您可以一次读取整个文档。你需要分别阅读每一行:
using(StreamReader sr = new StreamReader(fs))
{
while(!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine());
}
}