Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datatable to csv写入zip下载错误:因为另一个进程正在使用它_C#_Csv_Streamwriter_Zipfile_Sharpziplib - Fatal编程技术网

C# Datatable to csv写入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 =

在这段代码中,我有两个数据库选项卡,在datatable中获取数据,然后在stream writer的帮助下将所有数据写入csv文件,然后将这两个文件添加到文件夹中,并以zip格式下载,但有时显示错误,进程无法访问文件“xxxxx.zip”,因为它正被另一个进程使用。

  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文件将具有相同的名称。这可能是原因。但我认为如果发生这种情况,它应该更早地引发异常。。。