0

EPPlus を使用してスプレッドシートを開き、写真や情報を入力しています。スプレッドシートに入力するために使用したすべての画像を含むフォルダーを削除しようとすると、このファイルが別のアプリケーションで使用されているというエラーが表示されます。使用したオブジェクトを解放してスプレッドシートを閉じる正しい方法はどれですか?

using (var package = new ExcelPackage(existingFile))
     {
        ExcelWorkbook workBook = package.Workbook;
        if (workBook != null)
        {
          if (workBook.Worksheets.Count > 0)
            {
              int i = 0;
              foreach(ExcelWorksheet worksheet in workBook.Worksheets)
              {
                xlWorkSeet1[i] = worksheet;
                i = i + 1;
              }

            }
        }

           //More code ...

           FileStream aFile = new FileStream(tempFolderPathAlt + saveas + ".xls",    FileMode.Create);
           byte[] byData = package.GetAsByteArray();
           aFile.Seek(0, SeekOrigin.Begin);
           aFile.Write(byData, 0, byData.Length);
           aFile.Close();

            xlWorkSeet1 = null;
            workBook = null;


      }//End using

     String P = Path.Combine(tempFolderPathAlt, "ExtractedFiles");
     bool directoryExists = Directory.Exists(P);
     if (directoryExists)
     Directory.Delete(P, true); // deletes sub-directories

スプレッドシートに追加した写真を削除しようとすると、エラーが発生します。

ここに画像の説明を入力

4

1 に答える 1

0

以下を試してみて、これが役立つかどうか教えてください

int writeTimeout = 200;
using (var aFile = new FileStream(tempFolderPathAlt + saveas + ".xls",    FileMode.Create))
{
      aFile.WriteTimeout = writeTimeout;
      byte[] byData = package.GetAsByteArray();            
      aFile.Seek(0, SeekOrigin.Begin);            
      aFile.Write(byData, 0, byData.Length);            
      xlWorkSeet1 = null;             
      workBook = null;  
      Thread.Sleep(writeTimeout);
}
于 2012-10-16T09:14:06.007 に答える