FTP下载将CrLf转换为Lf

本文关键字:Lf 转换 CrLf 下载 FTP | 更新日期: 2023-09-27 18:00:51

我正在使用以下代码从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。

FTP下载将CrLf转换为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
   }
}

FTP的"二进制"传输模式逐字节精确复制文件。简单明了。

然而,当在不同的操作系统之间引入文本文件时,这可能不是你想要的——不同的操作体系使用不同的代码来表示换行符。"ASCII"模式就是为了这个目的而存在的:它自动将源系统格式的所有行尾转换为目的地格式。链接