0
我有一個關於我的Asp.Net應用程序的問題。我正在使用一個DataTable創建一個Excel文件。這裏是相關的功能:Asp.Net文件流IO異常:無法訪問文件,因爲進程正在被另一個進程使用
public static void ExportToExcel(System.Data.DataTable Tbl, string ExcelFilePath)
{
try
{
if (Tbl == null || Tbl.Columns.Count == 0)
throw new Exception("ExportToExcel: Null or empty input table!\n");
// load excel, and create a new workbook
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Workbooks.Add();
// single worksheet
Microsoft.Office.Interop.Excel._Worksheet workSheet = excelApp.ActiveSheet;
// column headings
for (int i = 0; i < Tbl.Columns.Count; i++)
{
workSheet.Cells[1, (i + 1)] = Tbl.Columns[i].ColumnName;
}
// rows
for (int i = 0; i < Tbl.Rows.Count; i++)
{
// to do: format datetime values before printing
for (int j = 0; j < Tbl.Columns.Count; j++)
{
workSheet.Cells[(i + 2), (j + 1)] = Tbl.Rows[i][j];
}
}
// check fielpath
if (ExcelFilePath != null && ExcelFilePath != "")
{
try
{
workSheet.SaveAs(ExcelFilePath);
excelApp.Quit();
}
catch (Exception ex)
{
throw new Exception("ExportToExcel: Excel file could not be saved! Check filepath.\n"
+ ex.Message);
}
}
else // no filepath is given
{
excelApp.Visible = true;
}
}
catch (Exception ex)
{
throw new Exception("ExportToExcel: \n" + ex.Message);
}
}
比我需要發送這個'新創建的'excel文件到用戶的計算機。用戶下載此文件。這裏是'下載功能':
public void FileDownload(string fileName)
{
Session["dosya"] = fileName;
string dosyaUrl = @Server.MapPath("/") + Session["dosya"].ToString() + ".xlsx"; //buradan sonra dosyamızı indirme işlemine başlıyoruz.
string yeni_dosya = Session["dosya"].ToString() + ".xlsx"; //biz işlem yapılacak dosyanın adını sessina attık oyle kullandık siz istediğiniz yolla yapabilirsiniz.
FileStream fs;
if (File.Exists(dosyaUrl))
{
fs = new FileStream(dosyaUrl, FileMode.Open, FileAccess.Read, FileShare.Read);
}
else
{
return;
}
byte[] buffer = new byte[(int)fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
fs.Flush();
fs.Close();
fs.Dispose();
Response.Clear();
Response.AddHeader("Content-Length", buffer.Length.ToString());//içeriğin uzunluğu AddHeader fonksiyonuna gonderiliyor...
Response.AddHeader("Content-Disposition", "attachment; filename=" + yeni_dosya);
Response.BinaryWrite(buffer);
File.Delete(dosyaUrl);
Response.End();
}
而這兩個功能是由我的網頁上的按鈕控制。
當代碼行來
fs.Read(buffer, 0, (int)fs.Length);
我得到異常的行:
IO異常是由用戶代碼未處理:因爲這個過程是被另一個無法訪問該文件過程
我不明白問題的原因。因爲我正在保存並關閉文件。在任務管理器上,我看不到有關Excel文件的任務。當我在函數行上獲得斷點並逐行執行代碼時,異常不會處理。
那麼會有什麼問題呢?