Преобразование загруженного .csv в поток памяти, а затем в c # datatable в .Net Core - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь создать приложение, которое будет принимать файлы разных типов и преобразовывать их в 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 Ответ

0 голосов
/ 03 декабря 2018

Вы можете получить байтовый массив в виде строки, используя:

Encoding.UTF8.GetString(stream.ToArray());
...