Преобразование загруженного.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());
Другие вопросы по тегам