CSVHelper-Нет Выхода
Я пытаюсь создать csv-файл с помощью пакета CSVHelper
nuGet
Это код
public ActionResult Test()
{
var ms = new MemoryStream();
var sr = new StreamWriter(ms);
var csv = new CsvWriter(sr);
csv.WriteField("sd");
csv.WriteField("sd");
csv.WriteField("sd");
csv.WriteField("sd");
//ms.Seek(0, 0);
sr.Flush();
//ms.Position = 0;
var len = ms.Length;
return File(ms, "text/csv", "test.csv");
}
Однако файл всегда пуст
Я прочитал здесь несколько вопросов, которые предполагают, что StreamWriter
необходимо смыть. Позиция переместилась на 0. Тем не менее, я попробовал это, и это, кажется, не работает
Я также пытался сделать то же самое с using
утверждениями для MemoryStream
, StreamWriter
и CSVWriter
Я перепробовал все это, и он по-прежнему пуст
Whatsmore, длина MemoryStream
всегда равно нулю
Что я делаю не так?
3 ответа:
Понял - мне нужно было передать массив байтов, а не поток, в FileContentResult:
return File(ms.ToArray(), "text/csv", "test.csv");
Убедитесь, что вы записываете конец записи при использовании метода WriteField
writer.NextRecord();
для записи данных в csv-файл можно использовать следующий код:using (var sw = new StreamWriter(@"test.csv")) { var writer = new CsvWriter(sw); writer.WriteField("Fist field"); writer.NextRecord(); writer.WriteField("Second field"); writer.NextRecord(); //add what you wana here }
Когда CsvHelper не имеет вывода, наиболее распространенной причиной этого является то, что писатель нуждается в
sw.Flush()
Использование CsvWriter без конфигурации отлично работало
CsvWriter(sw); // with no configuration
С помощью конфигурации
IgnoreReferences = true
я придумал пустой csvCsvWriter(sw, new Configuration.CsvConfiguration() { Delimiter = ";", IgnoreReferences = true });
Решение (полный пример)
var ms = new System.IO.MemoryStream(); var sw = new System.IO.StreamWriter(ms); var csvOut = new CsvWriter(sw, new Configuration.CsvConfiguration() { Delimiter = ";", IgnoreReferences = true }); csvOut.WriteRecords(someCollection); // IMPORTANT LINE sw.Flush(); ms.Position = 0; return File(ms, "text/csv", "resultFile.csv");
Подсказка, найденная на Github: https://github.com/JoshClose/CsvHelper/issues/47