一段下载文件的代码,运行时第一次会出错,错误信息说下载的文件被其他进程使用,但是重新打开页面再次下载就没有任何问题,单步调试也没有任何问题。
代码如下:
private void OpenFile(string StrFileName,string StrUnitName)
{
Response.Clear();
Response.ClearHeaders();
Response.BufferOutput = true;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(TxtBeginData.Text.Trim().ToString() + "_台帐_" + StrUnitName + ".xls", Encoding.UTF8)); CloseAllExcel();//结束EXCEL进程
Response.WriteFile( StrFileName );//这一行是有错误的时候提示的错误行
Response.Flush();
File.Delete(StrFileName);
Response.End();
}
代码如下:
private void OpenFile(string StrFileName,string StrUnitName)
{
Response.Clear();
Response.ClearHeaders();
Response.BufferOutput = true;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(TxtBeginData.Text.Trim().ToString() + "_台帐_" + StrUnitName + ".xls", Encoding.UTF8)); CloseAllExcel();//结束EXCEL进程
Response.WriteFile( StrFileName );//这一行是有错误的时候提示的错误行
Response.Flush();
File.Delete(StrFileName);
Response.End();
}
之后,垃圾回收程序不会立刻回收,而是当垃圾回收程序去收集资源时,才进行无用资源的回收估计是在程序调用 CloseAllExcel();// 这句之后,你的excel.dll 还在占用生成的文件
Excel.Application myExcel=new Excel.ApplicationClass( );
Excel.Workbook myBook = myExcel.Application.Workbooks.Open(StrFileName1,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
myExcel.Visible=false;
Excel.Worksheet mySheet=(Excel.Worksheet)myBook.Worksheets[1];
int RowNum = 3;
int ColumnNum = 4; mySheet.Cells[1,3] = TxtBeginData.Text.ToString();
Excel.Range r;
r = mySheet.get_Range(mySheet.Cells[RowNum,1],mySheet.Cells[RowNum,1]);
while (r.Text.ToString() != "")
{
DataRow[] Dr = Tables.Select("cname='"+ r.Text.ToString().Trim() +"'");
if (Dr.Length > 0)
{
for(int i=1;i<4;i++)
mySheet.Cells[RowNum,ColumnNum + i] = Dr[0]["TimeValue" + i].ToString();
}
RowNum ++ ;
r = mySheet.get_Range(mySheet.Cells[RowNum,1],mySheet.Cells[RowNum,1]);
}
myBook.SaveAs(StrFileName,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlNoChange,missing,missing,missing,missing);
myBook = null;
myExcel.Quit();
myExcel = null;
exec仍然在占用着文件.
你可能说你已经发出.quit().但是这只是通知clr,可以回收内存.
但并不是说把进程kill了.
所以可能存在一个时间差.
你可以这么试试.
1.先用一个按钮,执行生成.
2.然后,中间间隔一点时间,再用一个按钮,来执行下载.
3.如果以上没问题.应该就是clr没有及时回收内存,或说系统没有及时退出execl进程.
时好时坏,cpu是执行的问题.可说系统分配的进程给cpu执行是有时间先后的,也就说是时间片.
这不说了.一般情况下我们感觉是即时的,但是,特殊情况呢?
觉得奇怪的就是为什么会不能及时结束呢?我在生成文件结束后又加了强制结束EXCEL进程的代码。
楼主可以试试:
CloseAllExcel();
Thread.sleep(100);
Response.WriteFile( StrFileName );
不过仍然谢谢先
暂时只好用FOR循环空语句来试验而且有个很奇怪的地方,每次当单步调试以后可以下载后,再次直接运行就可以了,但是过一段时间以后就又不行了