Преобразование загруженного.csv в поток памяти, а затем в C# datatable в.Net Core
Я пытаюсь сделать приложение, которое будет принимать несколько типов файлов и конвертировать их в AC# DataTable
, Для этого я сначала копирую файл в MemoryStream
и запись расширения файла. Затем на основе расширения мне нужно прочитать поток по-разному.
Я испытываю трудности при загрузке .csv
файл. Сначала я копирую его в поток памяти, но потом не могу правильно прочитать его. Пожалуйста помоги.
Пример кода
public async Task<IActionResult> UploadFile(IFormFile file) {
Datatable dt = new DataTable();
var extension = Path.GetExtension(file.FileName);
if (file.length > 0) {
using (var ms = new MemoryStream()) {
await file.CopyToAsync(ms);
dt = ConvertFileToDataTable(ms, extension);
}
}
}
public DataTable ConvertFileToDataTable(MemoryStream stream, string ext) {
switch (ext.ToLower()) {
case ".xlsx":
// Already have this working
break;
case ".csv":
// This is where I need help
}
}
С CSV я делаю предположение, что первый ряд содержит заголовки. Если бы я мог просто преобразовать MemoryStream
обратно в строку CSV, тогда я мог бы обработать логику оттуда, я просто не знаю, как сделать эту часть.
Причина, по которой мне нужно сделать преобразование в MemoryStream
потому что я работаю над стандартной библиотекой.Net, которая не будет иметь доступа к IFormFile. Это будет принимать в потоке и возвращать таблицу данных. По сути, он обрабатывает код в методе ConvertFileToDataTable
выше.
1 ответ
Вы можете получить байтовый массив в виде строки, используя:
Encoding.UTF8.GetString(stream.ToArray());