C# Datatable to csv写入zip下载错误:因为另一个进程正在使用它
在这段代码中,我有两个数据库选项卡,在datatable中获取数据,然后在stream writer的帮助下将所有数据写入csv文件,然后将这两个文件添加到文件夹中,并以zip格式下载,但有时显示错误,进程无法访问文件“xxxxx.zip”,因为它正被另一个进程使用。C# Datatable to csv写入zip下载错误:因为另一个进程正在使用它,c#,csv,streamwriter,zipfile,sharpziplib,C#,Csv,Streamwriter,Zipfile,Sharpziplib,在这段代码中,我有两个数据库选项卡,在datatable中获取数据,然后在stream writer的帮助下将所有数据写入csv文件,然后将这两个文件添加到文件夹中,并以zip格式下载,但有时显示错误,进程无法访问文件“xxxxx.zip”,因为它正被另一个进程使用。 protected void btnExportToCSV_Click(object sender, EventArgs e) { //Work Detail blExportToExcel obj =
protected void btnExportToCSV_Click(object sender, EventArgs e)
{
//Work Detail
blExportToExcel obj = new blExportToExcel();
System.Data.DataTable dtTechSanc = blDbFunction.GetTechSanc(ddlAgency.SelectedValue.ToString(), ddlDivision.SelectedValue.ToString(), ddlDistrict.SelectedValue.ToString(), ddlMC.SelectedValue.ToString(), ddlScheme.SelectedValue.ToString(), ddlUserType.SelectedValue.ToString(), ddlWorkType.SelectedValue.ToString(), ddlWorkNature.SelectedValue.ToString(), ddlWorkStatus.SelectedValue.ToString(), ((prpSessionData)(Session["sUserInfo"])).UId);
dtTechSanc.Columns["Id"].ColumnName = "WorkCode";
dtTechSanc.Columns["TSId"].ColumnName = "Id";
string filenamezip = "ZipFile\\TechSancRevision_" + DateTime.Now.ToString().Replace(":", "-").Replace("/", "-") + ".zip";
string strPathAndQuery = HttpContext.Current.Request.PhysicalApplicationPath;
string paths = strPathAndQuery + filenamezip;
ZipFile z = ZipFile.Create(paths);
z.BeginUpdate();
if (dtTechSanc.Rows.Count > 0)
{
string tmpPath = Server.MapPath("FileTemplates");
string tmpFileName = "TechSancRevision.csv";
tmpPath = @"" + tmpPath.Replace("/", "\\").Replace("\\Department", "") + "\\" + tmpFileName;
StreamWriter sw = new StreamWriter(tmpPath, false);
int columnCount = dtTechSanc.Columns.Count;
for (int i = 0; i < columnCount; i++)
{
sw.Write(dtTechSanc.Columns[i]);
if (i < columnCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
foreach (DataRow dr in dtTechSanc.Rows)
{
for (int i = 0; i < columnCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
sw.Write(dr[i].ToString());
}
if (i < columnCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
}
sw.Close();
z.Add(tmpPath, tmpFileName);
z.CommitUpdate();
}
//Fund Allocation
System.Data.DataTable dtFA = blDbFunction.GetFundAllocationTS(ddlAgency.SelectedValue.ToString(), ddlDivision.SelectedValue.ToString(), ddlDistrict.SelectedValue.ToString(), ddlMC.SelectedValue.ToString(), ddlScheme.SelectedValue.ToString(), ddlUserType.SelectedValue.ToString(), ddlWorkType.SelectedValue.ToString(), ddlWorkNature.SelectedValue.ToString(), ddlWorkStatus.SelectedValue.ToString(), ((prpSessionData)(Session["sUserInfo"])).UId);
if (dtFA.Rows.Count > 0)
{
z.BeginUpdate();
string tmpPath = Server.MapPath("FileTemplates");
string tmpFileName = "FundsAllocationRevision.csv";
tmpPath = @"" + tmpPath.Replace("/", "\\").Replace("\\Department", "") + "\\" + tmpFileName;
dtFA.Columns["FAId"].ColumnName = "Id";
dtFA.Columns["WorkId"].ColumnName = "WorkCode";
StreamWriter sw = new StreamWriter(tmpPath, false);
int columnCount = dtFA.Columns.Count;
for (int i = 0; i < columnCount; i++)
{
sw.Write(dtFA.Columns[i]);
if (i < columnCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
foreach (DataRow dr in dtFA.Rows)
{
for (int i = 0; i < columnCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
sw.Write(dr[i].ToString());
}
if (i < columnCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
}
sw.Close();
z.Add(tmpPath, tmpFileName);
z.CommitUpdate();
z.Close();
}
System.IO.FileInfo file = new System.IO.FileInfo(paths);
Response.ContentType = "application/text";
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + Path.GetFileName(paths));
Response.ContentType = "application/octet-stream";
Response.WriteFile(file.FullName);/// error shows here
Response.End();
}
}
protectedvoid btnExportToCSV\u单击(对象发送方,事件参数e)
{
//工作细节
BLEXPORTOEXCEL obj=新的BLEXPORTOEXCEL();
System.Data.DataTable dtTechSanc=blDbFunction.GetTechSanc(ddlagence.SelectedValue.ToString()、ddlDivision.SelectedValue.ToString()、ddlDistrict.SelectedValue.ToString()、ddlMC.SelectedValue.ToString()、ddlUserType.SelectedValue.ToString()、ddlWorkType.SelectedValue.ToString()),ddlWorkNature.SelectedValue.ToString(),ddlWorkStatus.SelectedValue.ToString(),((prpSessionData)(会话[“sUserInfo”]).UId);
dtTechSanc.Columns[“Id”].ColumnName=“WorkCode”;
dtTechSanc.Columns[“TSId”].ColumnName=“Id”;
字符串filenamezip=“ZipFile\\TechSancRevision\uquot+DateTime.Now.ToString()。替换(“:”,“-”)。替换(“/”,“-”+”).zip”;
字符串strPathAndQuery=HttpContext.Current.Request.PhysicalApplicationPath;
字符串路径=strPathAndQuery+filenamezip;
ZipFile z=ZipFile.Create(路径);
z、 开始更新();
如果(dtTechSanc.Rows.Count>0)
{
字符串tmpPath=Server.MapPath(“文件模板”);
字符串tmpFileName=“TechSancRevision.csv”;
tmpPath=@“+tmpPath.Replace(“/”,“\\”)。Replace(“\\Department”,”)+“\\”+tmpFileName;
StreamWriter sw=新的StreamWriter(tmpPath,false);
int columnCount=dtTechSanc.Columns.Count;
对于(int i=0;i0)
{
z、 开始更新();
字符串tmpPath=Server.MapPath(“文件模板”);
字符串tmpFileName=“FundsAllocationRevision.csv”;
tmpPath=@“+tmpPath.Replace(“/”,“\\”)。Replace(“\\Department”,”)+“\\”+tmpFileName;
dtFA.Columns[“FAId”].ColumnName=“Id”;
dtFA.Columns[“WorkId”]。ColumnName=“WorkCode”;
StreamWriter sw=新的StreamWriter(tmpPath,false);
int columnCount=dtFA.Columns.Count;
对于(int i=0;i
我不确定这对您是否有帮助,但我正在使用下面的代码传输zip,请尝试一下。它工作完美,在过去两年中一直在使用
Response.ContentType = "application/zip";
Response.AppendHeader("Content-Disposition", "attachment; filename=Test.zip")
Response.TransmitFile(@"C:\Test.zip");
Response.Flush();
// Prevents any other content from being sent to the browser
Response.SuppressContent = true;
// Directs the thread to finish, bypassing additional processing
HttpContext.Current.ApplicationInstance.CompleteRequest();
如果两个用户同时启动此操作(在一秒钟内),则生成的zip文件将具有相同的名称。这可能是原因。但我认为如果发生这种情况,它应该更早地引发异常。。。