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

2023-12-30

我正在尝试使用 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 服务器 https://stackoverflow.com/q/45945512/850848
使用 SSH.NET 从 ByteArray/MemoryStream 上传 - 创建大小为 0KB 的文件 https://stackoverflow.com/q/35862714/850848


为此,您还必须确保StreamWriter不关闭内存流:
有什么方法可以在不关闭 BaseStream 的情况下关闭 StreamWriter 吗? https://stackoverflow.com/q/2666888/850848


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

stream.Position = 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐