使用 SSH.NET 将 csvhelper 创建的内容的内存流上传到 SFTP 服务器时,上传的文件为空 [英] When uploading memory stream with contents created by csvhelper using SSH.NET to SFTP server, the uploaded file is empty

查看:120
本文介绍了使用 SSH.NET 将 csvhelper 创建的内容的内存流上传到 SFTP 服务器时,上传的文件为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用 csvhelper 发送 CSV 文件.但是当我发送它时,它总是空的.

I'm truing to send a CSV with csvhelper. But when I send it, it is always empty.

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);
    }
}

我尝试了很多东西,但它总是创建的空文件.

i try serveral things but it always empty file that is create .

推荐答案

写入流后,您必须将读取指针返回到开始位置.例如,这些问题涵盖了这一点:
使用 SSH.NET 将数据从内存上传到 SFTP 服务器
使用 SSH.NET 从 ByteArray/MemoryStream 上传 - 创建的文件大小为 0KB

You have to seek the read pointer of the stream back to beginning after writing to it. This is covered for example in these questions:
Upload data from memory to SFTP server using SSH.NET
Upload from ByteArray/MemoryStream using SSH.NET - File gets created with size 0KB

为此,您还必须确保 StreamWriter 不会关闭内存流:
有没有办法在不关闭 BaseStream 的情况下关闭 StreamWriter?

For that you also have to make sure that the StreamWriter does not close the memory stream:
Is there any way to close a StreamWriter without closing its BaseStream?

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

stream.Position = 0;

这篇关于使用 SSH.NET 将 csvhelper 创建的内容的内存流上传到 SFTP 服务器时,上传的文件为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆