3

Excelファイルをアップロードし、そこからデータを抽出してデータベースに保存しています。MVC4 .NET Framework を使用しています。これはクラスからの私のコードです:

 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 に削除の定義が含まれていません

また、この行を書かずにコードを再度実行しようとすると、同じ名前のファイルが存在するため保存できず、現在使用中のため置換できなかったと表示されます。

これを取り除くにはどうすればよいですか:

  (File.Delete()) Error

保存せずに受け取った Excel ファイルにアクセスする他の方法も、データに 1 回アクセスするだけでよいため、非常に役立ちます。

4

2 に答える 2

3

そこでFile使用するのは、メソッドの入力パラメーターである変数です。そのパラメーターはタイプHttpPostedFileBaseであり、そのタイプには、そのインスタンスを削除できるインスタンスメソッドFile(さらに言えば静的メソッドも) がありません。

名前空間にある型の静的Deleteメソッドを探している可能性があります。FileSystem.IO

簡単な修正は、あなたが何を意味するかを明確にする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);
     }
 }
于 2015-09-23T11:26:34.913 に答える