簡體   English   中英

使用 SSH.NET 將 csvhelper 創建的內容的內存流上傳到 SFTP 服務器時,上傳的文件為空

[英]When uploading memory stream with contents created by csvhelper using SSH.NET to SFTP server, the uploaded file is empty

我很想用 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM