在ASP.NET核心MVC中上传文件后立即读取文件

问题描述 投票:0回答:1

我刚刚将一个文件上传到我项目的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. 有没有其他方法可以帮助我绕过这个?

我打算从.csv文件中读取数据,并从长远来看将记录插入数据库。

谢谢!

c# file-upload asp.net-core-mvc file-read
1个回答
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());
© www.soinside.com 2019 - 2024. All rights reserved.