将csvhelper使用SSH.NET创建的内容的内存流上传到SFTP服务器时,上传的文件为空



我正在使用csvhelper发送CSV。但当我发送它时,它总是空的。

using (var sftProvider =new SFTProvider(Configuration))
using (var csvProvider=new CSVProvider(Configuration))
using (Stream fileStream = new MemoryStream())
{
var sftp = sftProvider.SFTPConnection("", "", "");
var nameFile = "/ethias/"+DateTime.Now.ToString(DateFormatConstants.DATE_FORMAT) + ".csv";
if (sftp.Exists(nameFile))
{
sftProvider.ReadFileSFTP(sftp, nameFile, fileStream);
} 
await csvProvider.WriteCsv(new List<EthiasResultDTO>() {ethiasResultDto},fileStream); 
sftProvider.UploadFileSFTP(sftp,nameFile,fileStream);
}

csv:的代码

public async Task WriteCsv<T>(List<T> csvInfo, Stream stream)
{
using(var writer = new StreamWriter(stream, Encoding.UTF8))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.Configuration.Delimiter = ";";
if ( stream.Length > 0)
{
csv.Configuration.HasHeaderRecord = false;
}
csv.WriteRecords(csvInfo);
}
}

我尝试了几种方法,但创建的文件总是空的。

在写入数据流后,您必须将其读指针查找回起始位置。例如,以下问题中就涉及到了这一点:
使用SSH.NET将数据从内存上载到SFTP服务器
通过SSH.NET从ByteArray/MemoryStream上载-创建大小为0KB 的文件


为此,您还必须确保StreamWriter不会关闭内存流:
是否有任何方法可以在不关闭其BaseStream的情况下关闭StreamWriter?


using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
// Write
}
stream.Position = 0;

最新更新