在ASP.NET核心MVC

时间:2018-03-01 06:38:02

标签: c# file-upload asp.net-core-mvc file-read

我刚刚将文件上传到我项目的wwwroot / files文件夹中。我打算做的是上传后立即读取文件。 我用来上传文件的代码工作正常,但是用于读取文件的代码会抛出此异常:  处理请求时发生未处理的异常。 IOException:进程无法访问文件'campuses.sql',因为它正由另一个进程使用。 Campuses.sql是我试图上传和读取的文件。 以下是我上传和阅读文件的代码。

 public IActionResult Institution(IFormFile InstitutionFile)
    {
        if(InstitutionFile != null)
        {
            var fileName = Path.Combine(he.WebRootPath + "/files/", Path.GetFileName(InstitutionFile.FileName));
            InstitutionFile.CopyTo(new FileStream(fileName, FileMode.Create));

       //Everything runs fine till here

            int counter = 0;
            string line;

            // Read the file and display it line by line.  
            System.IO.StreamReader file =
                new System.IO.StreamReader(fileName);
            while ((line = file.ReadLine()) != null)
            {
                System.Console.WriteLine(line);
                counter++;
            }

            file.Close();

            System.Console.ReadLine();



        }

        return RedirectToAction("Index", "Institutions");

    }

所以: 1.我怀疑上传过程仍在使用该文件。如何使用该文件停止该过程以便我可以阅读它?

  1. 还有另一种方法可以帮助我解决这个问题吗?
  2. 我打算从.csv文件中读取数据,并从长远来看将记录插入数据库。

    谢谢!

1 个答案:

答案 0 :(得分:0)

InstitutionFile而不是物理文件中读取。

同时将FileStream放入using块,以便释放文件。

var fileName = Path.Combine("" + "/files/", Path.GetFileName(InstitutionFile.FileName));
using (var fileStream = new FileStream(fileName, FileMode.Create))
      InstitutionFile.CopyTo(fileStream);

var st = new MemoryStream();
InstitutionFile.CopyTo(st);
var content = Encoding.ASCII.GetString(st.ToArray());