1

我正在尝试制作一个可以接受多种文件类型并将它们转换为 ac# 的应用程序DataTable。为此,我首先将文件复制到 aMemoryStream并记录文件的扩展名。然后基于扩展我需要以不同的方式读取流。

我在上传.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 字符串,那么我可以从那里处理逻辑,我只是​​不知道该怎么做。

我需要转换为 aMemoryStream的原因是因为我正在开发一个无法访问 IFormFile 的 .Net 标准库。它将接收流并返回一个数据表。基本上,它处理上述方法中的代码ConvertFileToDataTable

4

1 回答 1

3

您可以使用以下方法将字节数组作为字符串获取:

Encoding.UTF8.GetString(stream.ToArray());
于 2018-12-03T19:25:09.403 回答