При загрузке потока памяти с содержимым, созданным csvhelper с использованием S SH. NET на SFTP-сервер, загруженный файл будет пустым - PullRequest
1 голос
/ 15 марта 2020

Я хочу отправить CSV с помощью csvhelper. Но когда я отправляю его, он всегда пуст.

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

Я пробую несколько вещей, но это всегда пустой файл, который создается.

1 Ответ

0 голосов
/ 15 марта 2020

Вы должны искать указатель чтения потока обратно в начало после записи в него. Это рассматривается, например, в следующих вопросах:
Загрузка данных из памяти на SFTP-сервер с использованием S SH. NET
Загрузка из ByteArray / MemoryStream с использованием S SH . NET - Файл создается с размером 0KB


. Для этого также необходимо убедиться, что StreamWriter не закрывает поток памяти:
Is Есть ли способ закрыть StreamWriter, не закрывая его BaseStream?


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

stream.Position = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...