2015-09-23 2 views
3

Я загружаю файл Excel и извлекаю данные из него и сохраняю его в базу данных. Я использую MVC4 .NET Framework. Это мой код из класса:Сохраните и удалите файл Excel, сохраненный с использованием HttpPostedFileBase

public static void Upload(HttpPostedFileBase File) 
     { 
      NIKEntities1 obj = new NIKEntities1(); 
      MyApp = new Excel.Application(); 
      MyApp.Visible = false; 
      string extension = System.IO.Path.GetExtension(File.FileName); 

      string pic = "Excel" + extension; 

      string path = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Excel"), pic); 

      File.SaveAs(path); 


      MyBook = MyApp.Workbooks.Open(path); 
      MySheet = (Excel.Worksheet)MyBook.Sheets[1]; // Explicit cast is not required here 
      int lastRow = MySheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row; 
      List<Employee> EmpList = new List<Employee>(); 

      for (int index = 2; index <= lastRow; index++) 
      { 
       System.Array MyValues = (System.Array)MySheet.get_Range("A" + 
        index.ToString(), "B" + index.ToString()).Cells.Value; 
       EmpList.Add(new Employee 
       { 
        BatchID = MyValues.GetValue(1, 1).ToString(), 
        BatchName = MyValues.GetValue(1, 2).ToString() 

       }); 
      } 

      for (int i = 0; i < EmpList.Count; i++) 
      { 
       int x=obj.USP_InsertBatches(EmpList[i].BatchID, EmpList[i].BatchName); 

      }  
     } 
    } 
    class Employee 
    { 
     public string BatchID; 
     public string BatchName; 
    } 

Этот код работает отлично в первый раз, но в следующий раз он говорит, что файл в настоящее время используется. Так я думал, удаления файла в конце кода, используя следующую строку:

File.Delete(path); 

Но эта линия бросил ошибку:

HttpPostedFileBase does not contain definition for Delete

Кроме того, если я не пишу эту строку и попытаться выполните код еще раз, он говорит, что он не может сохранить, потому что файл существует с тем же именем и не может быть заменен, поскольку он в настоящее время используется.

Что я должен сделать, чтобы избавиться от этого:

(File.Delete()) Error 

Любой другой способ доступа к файлу Excel, который я получаю без сохранения также будет очень полезно, потому что я должен просто получить доступ к данным один раз ,

ответ

2

File Используемая вами переменная является входным параметром вашего метода. Этот параметр имеет тип HttpPostedFileBase, и этот тип не имеет instance methods (и не статические, если на то пошло), которые позволяют удалить этот экземпляр File.

Возможно, вы ищете статический метод Delete по типу File, который находится в пространстве имен System.IO.

QuickFix бы быть ясно, какую File вы имеете в виду:

System.IO.File.Delete(path); 

Вы можете рассмотреть различные именования руководство для ваших переменных, хотя. В C# мы склонны писать переменные, начиная с буквы нижнего регистра. Почти все типы в структуре начинаются с буквы верхнего уровня. Из-за чего легче отличить вещь file и тип File.

Обратите внимание, что файл может быть удален только в том случае, если он закрыт всеми процессами, и все файловые дескрипторы очищаются файловой системой. В вашем случае вы должны убедиться, что Excel закрыл файл и выпустил его. Если у вас работает поисковый индексатор или грубый антивирус, вам придется попробовать несколько раз, прежде чем сдаться.

Я обычно использую этот код:

// make sure here all Ole Automation servers (like Excel or Word) 
// have closed the file (so close the workbook, document etc) 
// we iterate a couple of times (10 in this case) 
for(int i=0; i< 10; i++) 
{ 
    try 
    { 
     System.IO.File.Delete(path); 
     break; 
    } catch (Exception exc) 
    { 
     Trace.WriteLine("failed delete {0}", exc.Message); 
     // let other threads do some work first 
     // http://blogs.msmvps.com/peterritchie/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program/ 
     Thread.Sleep(0); 
    } 
} 
+0

Done That. Последняя часть, в которую вы поставили цикл от 1 до 10, в моем случае не требовалась. Я просто закрыл книгу в конце, а затем удалил этот файл –

0

Из того, что я могу сказать, вы открываете Excel, чтение файла, но никогда не закрывая Excel.

Добавить:

MyApp.Workbooks.Close(); 
MyApp.Quit(); 

в конце функции Upload. Еще лучше, если обернуть весь код, который вы получили в

try{ 
    //here goes your current code 
} 
catch(Exception e) 
{ 
//manage exception 
} 
finally 
{ 
MyApp.Workbooks.Close(); 
MyApp.Quit(); 
} 

Вы инициализировать MyApp вне попробовать поймать блок, то все, что происходит перекрывание файл.

Смежные вопросы