Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# ASP.NET提供锁定文件的下载_C#_Asp.net_Iis_File Upload_Download - Fatal编程技术网

C# ASP.NET提供锁定文件的下载

C# ASP.NET提供锁定文件的下载,c#,asp.net,iis,file-upload,download,C#,Asp.net,Iis,File Upload,Download,我一直在尝试一些方法,得到了这个 我真正需要的是Response.TransmitFile(或MVC文件方法,它在后面使用TransmitFile)。但是使用FileShare.ReadWrite而不是Read 我正在使用2GB文件进行测试。传输文件没有内存或CPU占用空间 我试图做一些类似的事情,但我不知道我是否在正确的道路上。此方法不消耗内存,但在峰值时消耗7%的cpu private void Download(string caminho) { const

我一直在尝试一些方法,得到了这个

我真正需要的是Response.TransmitFile(或MVC文件方法,它在后面使用TransmitFile)。但是使用FileShare.ReadWrite而不是Read

我正在使用2GB文件进行测试。传输文件没有内存或CPU占用空间

我试图做一些类似的事情,但我不知道我是否在正确的道路上。此方法不消耗内存,但在峰值时消耗7%的cpu

    private void Download(string caminho)
    {
        const int tamanhoBuffer = 8192;
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename*=UTF-8''" + Path.GetFileName(caminho) + "");


        using (var fs = new FileStream(caminho, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            Response.AddHeader("Content-Length", fs.Length.ToString());

            byte[] conteudo = new byte[tamanhoBuffer];
            int size;

            while (Response.IsClientConnected && (size = fs.Read(conteudo, 0, conteudo.Length)) > 0)
            {
                Response.OutputStream.Write(conteudo, 0, size);
                Response.Flush();
            }

            Response.End();
        }
    }

为什么您希望正在下载的文件可供写入?您希望下载会发生什么情况?问题是,我需要发送一个已由用户打开的文件。如果该文件已由任何用户打开,并且该用户正在进行更改,则您不应使其可供下载。是的,我知道。但我们使用的是DWF viewer,它会获得写锁定,即使它是只读应用程序。为了安全起见,您应该使用该文件的副本进行下载。