[英]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.