2014-12-15 4 views
1

Я строю небольшой веб-сайт в .NET с C#. Пользователь должен загрузить файл Excel, расширение .xls или .xlsx, которое уже реализовано. Хотя у меня проблемы с чтением значений из файла Excel. Сейчас у меня этот кусок кода выписал:Не удается прочитать файл Excel - File.open недействителен

public ActionResult Index(HttpPostedFileBase file) 
    {    
      string fileName = Path.GetFileName(file.FileName); 
      if (fileName.EndsWith(".xlsx") || (fileName.EndsWith(".xls"))) 
      { 
       // store the file inside ~/App_Data/uploads folder 
       string path = Path.Combine(Server.MapPath("~/App_Data/uploads/"), fileName); 
       file.SaveAs(path); 
       // Get file info 
       int contentLength = file.ContentLength; 
       string contentType = file.ContentType; 

       // Get file data 
       byte[] data = new byte[] { }; 
       using (var binaryReader = new BinaryReader(file.InputStream)) 
       { 
        data = binaryReader.ReadBytes(file.ContentLength); 
       } 

       using (FileStream fs = File.Open(path, FileMode.OpenOrCreate)) 
       { 
        UTF8Encoding temp = new UTF8Encoding(true); 

        while (fs.Read(data, 0, data.Length) > 0) 
        { 
         //Console.WriteLine(temp.GetString(b)); 
        } 
       } 

       // redirect back to the index action to show the form once again 
       return RedirectToAction("Index"); 
      } 

Теперь я предполагаю, что код AINT плохо, но я получаю сообщение об ошибке @ второй линии, используя, в «File.open (...) '

'System.Web.Mvc.Controller.File(byte[], string)' is a 'method', which is not valid in the given context C:\Users\.....cs 

Я прочитал множество примеров в Интернете, но ни один из них не кажется, имеет подобную проблему:/Если кто-то может решить эту ошибку или помочь мне с этой проблемой, было бы весьма признателен! Это, наверное, что-то маленькое/глупое.

+5

Похоже, в классе контроллера MVC существует метод под названием «Файл». Вместо этого попробуйте использовать полное имя, то есть «System.IO.File.Open (...)». – Dirk

+0

Похоже, вы не импортируете пространство имен 'System.IO'. Кроме того, попытка чтения файла Excel без библиотеки, такой как Aspose или Office Automation (которая не должна использоваться в серверных приложениях в любом случае), является Fur's Errand. – Dai

+0

ах да, это решило ошибку. Благодаря! И что бы вы порекомендовали точно? Я буду google Aspose и OA, хотя у меня немного проблемы с atm tbh. –

ответ

5

Ваш класс контроллера наследуется от System.Web.Mvc.Controller, который имеет метод в базовом классе под названием File. Вам нужно будет явно использовать правильный оператор при использовании:

using (FileStream fs = System.IO.File.Open(path, FileMode.OpenOrCreate))