我正在使用以下代码从FTP服务器下载文本文件(目录包含来自FTP服务器的文件/目录列表):
for (int i = 0; i <= directories.Count - 1; i++)
{
int bytesRead = 0;
byte[] buffer = new byte[2048];
string trnsfrpth = f.getConfig("TempPath") + @"/" + directories[i].ToString();
if (directories[i].Contains(".") && !(directories[i].ToString().Equals(".") || directories[i].ToString().Equals("..")))
{
FtpWebRequest fileFtpRequest = (FtpWebRequest)WebRequest.Create(f.getConfig("FTP") + @"/" + directories[i].ToString());
fileFtpRequest.UseBinary = true;
fileFtpRequest.Credentials = credentials;
fileFtpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
Stream fileResponse = fileFtpRequest.GetResponse().GetResponseStream();
FileStream fileStream = new FileStream(trnsfrpth, FileMode.Create);
while (true)
{
bytesRead = fileResponse.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
fileStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();
}
我得到的文件都有LF作为换行符。我不是100%确定文件开头是否有CR LF换行符。但是,如果我通过FileZilla下载它们,它们将使用CR LF。我需要文件的CR LF版本。我想问一下我在这里做错什么了吗,或者该代码是否正确,FileZilla在下载时会自动转换文件,因此我必须手动替换LF。
最佳答案
您具有fileFtpRequest.UseBinary = true;
,并且正在下载端使用二进制FileStream。
因此,不是FTP客户端可以转换任何内容,您想要的是FilZilla显然可以进行的转换,但是您没有得到转换。
您可以尝试使用UseBinary=false
,但是文档对效果不明确。
StreamReader接受'\ n',因此您可以将while(true)
部分替换为
using (Stream fileResponse = fileFtpRequest.GetResponse().GetResponseStream())
using (var reader = new StreamReader(fileResponse))
{
string line;
while ((line = reader.ReadLine()) != null)
{
something.WriteLine(line); // here you get the .NET line ending
}
}
关于c# - FTP下载将CrLf转换为Lf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31179092/