c# - FTP 下载将 CrLf 转换为 Lf

标签 c# ftp

我正在使用此代码从 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/

相关文章:

vb.net - 检查 FTP 文件夹是否存在,如果不存在则创建它

Cocoa 连接套件和 FTP

python - 如何在 FTP 连接中后退 : PYTHON

C++ ftp上传错误

c# - 从.net core应用程序获取AWS S3目录名称列表

c# - ASP.Net 从文本框插入数据到数据库

c# - 使用 Dapper 水化复杂对象

c# - TreatControlCAsInput 问题。这是一个错误吗?

c# - 如何从 C# 生成数据库表以对数据库进行版本控制?

C# FTP上传和下载