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