后台是vb.net
先从数据库里取得一批数据,然后写到CSV文件里,并将这个CSV文件保存到服务器的某个路径下,然后把这个文件下载到客户端上面的功能已经实现现在要修正一下, 就是说数据写到CSV文件后不保存到服务器上,直接在数据写完以后就将CSV文件下载到本地,请问这个代码该如何实现呢?实现下载的代码如下
            Dim objFileInfo As System.IO.FileInfo = New System.IO.FileInfo(strWinPath & strFileNm)            If System.IO.File.Exists(strWinPath & strFileNm) Then
                Response.Clear()
                Response.ContentType = "application/octet-stream"
                Response.AddHeader("Content-Disposition", "attachment;  filename=" + objFileInfo.Name)
                Response.AddHeader("Content-Length", objFileInfo.Length.ToString())
                Response.WriteFile(objFileInfo.FullName)
                Response.Flush()
                Response.End()            End If

解决方案 »

  1.   

    FileStream stream=null;
    stream = new FileStream(physicalFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);    
    int bufSize = (int)stream.Length;
    byte[] buf = new byte[bufSize]; int bytesRead = stream.Read(buf, 0, bufSize);
    HttpContext.Current.Response.ContentType = "application/octet-stream"; 
    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename="+System.IO.Path.GetFileName(physicalFilePath));
    HttpContext.Current.Response.OutputStream.Write(buf, 0, bytesRead);
    HttpContext.Current.Response.End();
      

  2.   

    下载完删除掉jc15271149(嘿咻) 的方法也要先用一个物理文件创建一个文件流,再把这个流放近数组,最后把数组的内容作为流发送到客户端,总之还是用到了物理文件lz的意思是不想借助物理文件,直接在服务器内存中生成文件流,并且发送到客户端,是这样吧还不会,呵呵,看高手解决
      

  3.   

    用MemoryStream替代你的FileStream, 然后通过Response.BinaryWrite输出。
      

  4.   

    TO :netlg  
       你说的对TO: fangxinggood
        能不能写个详细一点的代码呢?假如我现在有一个从数据库里取出来的dataSet
    如何写到CSV文件里并在写完以后直接下载到客户端?
      

  5.   

    先从数据库里取得一批数据,然后写到CSV文件里,并将这个CSV文件保存到服务器的某个路径下,然后把这个文件下载到客户端,然后删除服务器端文件。
      

  6.   

    to: Qim
    你说的我已经实现了
    我现在不想这么做,不要保存到服务器这一步
      

  7.   

    Dim i As Int16
                    Dim sw As New System.IO.StringWriter()
                    For i = 0 To objDataSet.Tables(0).Rows.Count - 1
                        sw.WriteLine(objDataSet.Tables(0).Rows(i)(0).ToString + "," + objDataSet.Tables(0).Rows(i)(1).ToString + "," + objDataSet.Tables(0).Rows(i)(2).ToString)
                    Next i                sw.Close()                Response.AddHeader("Content-Disposition", "attachment; filename=test.csv")
                    Response.ContentType = "application/octet-stream"
                    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312")
                    Response.Write(sw)
                    Response.End()用这个可以直接download下来
      

  8.   

    jc15271149(嘿咻) 
    的是对的,设置 Response.ContentType ,用Response.OutputStream 内存输出的方式就可以了