Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# 从服务器下载文件,然后在服务器上删除_C#_Asp.net_Download_Response - Fatal编程技术网

C# 从服务器下载文件,然后在服务器上删除

C# 从服务器下载文件,然后在服务器上删除,c#,asp.net,download,response,C#,Asp.net,Download,Response,好的,我正在从服务器下载一个文件,我计划在客户端下载后删除我在服务器上下载的文件 我的下载代码工作正常,但我不知道什么时候把命令删除文件 string filepath = restoredFilename.ToString(); // Create New instance of FileInfo class to get the properties of the file being downloaded FileInfo myfile =

好的,我正在从服务器下载一个文件,我计划在客户端下载后删除我在服务器上下载的文件

我的下载代码工作正常,但我不知道什么时候把命令删除文件

string filepath = restoredFilename.ToString();

            // Create New instance of FileInfo class to get the properties of the file being downloaded
            FileInfo myfile = new FileInfo(filepath);

            // Checking if file exists
            if (myfile.Exists)
            {

                // Clear the content of the response
                Response.ClearContent();

                // Add the file name and attachment, which will force the open/cancel/save dialog box to show, to the header
                Response.AddHeader("Content-Disposition", "attachment; filename=" + myfile.Name);

                //Response.AddHeader("Content-Disposition", "inline; filename=" + myfile.Name);
                // Add the file size into the response header
                Response.AddHeader("Content-Length", myfile.Length.ToString());

                // Set the ContentType
                Response.ContentType = ReturnExtension(myfile.Extension.ToLower());

                //// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
                Response.TransmitFile(myfile.FullName);

                // End the response
                Response.End();

            }
现在我知道了响应。End将停止所有操作并返回值,那么是否还有其他方法可以这样做

我需要调用一个函数

DeleteRestoredFileForGUIrestoredFilename

删除文件但不知道放在哪里。。我试着在回应之前和之后放置。结束,但不起作用

感谢您的帮助。。。谢谢

添加

Response.Flush();
DeleteRestoredFileForGUI(restoredFilename);
在调用TransmitFile之后,放弃对Response.End的调用。您不需要它

如果不起作用,请放弃TransmitFile并使用:

Stream s = myFile.OpenRead();
int bytesRead = 0;
byte[] buffer = new byte[32 * 1024] //32k buffer
while((bytesRead = s.Read(buffer, 0, buffer.Length)) > 0 &&
      Response.IsClientConnected)
{
   Response.OutputStream.Write(buffer, 0, bytesRead);
   Response.Flush();
}

在调用TransmitFile之后,放弃对Response.End的调用。您不需要它

如果不起作用,请放弃TransmitFile并使用:

Stream s = myFile.OpenRead();
int bytesRead = 0;
byte[] buffer = new byte[32 * 1024] //32k buffer
while((bytesRead = s.Read(buffer, 0, buffer.Length)) > 0 &&
      Response.IsClientConnected)
{
   Response.OutputStream.Write(buffer, 0, bytesRead);
   Response.Flush();
}

你遵循的一般模式让我想知道,你是在这样做吗

为客户端创建数据并保存到 磁盘将文件传输到客户端删除 文件 如果是,您可能会将系统更改为在内存中工作。由于内存是在.Net中管理的,因此您不必执行此手动清理,而且根据文件的大小,这也可能会快一点:

为客户端创建数据并保存到MemoryStream 将流传输到客户端
你遵循的一般模式让我想知道,你是在这样做吗

为客户端创建数据并保存到 磁盘将文件传输到客户端删除 文件 如果是,您可能会将系统更改为在内存中工作。由于内存是在.Net中管理的,因此您不必执行此手动清理,而且根据文件的大小,这也可能会快一点:

为客户端创建数据并保存到MemoryStream 将流传输到客户端
由于在标头中设置了文件名,因此有两个选项:

将文件内容读入字符串,删除文件,将字符串作为消息正文进行回显/打印

将文件重命名为delete-filename.xxx,然后进行一些外部处理,可能是cron作业?它将返回并删除以该前缀开头的任何文件


由于在标头中设置了文件名,因此有两个选项:

将文件内容读入字符串,删除文件,将字符串作为消息正文进行回显/打印

将文件重命名为delete-filename.xxx,然后进行一些外部处理,可能是cron作业?它将返回并删除以该前缀开头的任何文件


您无法立即删除该文件,因为它可能尚未下载。从服务器端,没有简单的方法可以判断文件是否已成功下载。如果浏览器打开了“打开/保存”对话框,该怎么办?在确认对话框之前,不会开始下载。此操作可能不会立即执行和/或取消对话框 或者,如果它是一个大文件,并且在完全下载之前连接已断开,该怎么办?是否可以再次尝试下载

处理您的情况通常建议的方法是,在一段时间后,作为一个单独的过程进行删除,这样您可以相当确定不再需要该文件,并且/或者在需要时可以重新创建/恢复该文件

根据您的情况,您可以有一个单独的进程定期删除/处理旧文件。或者,如果您的流量较低,您可以在每次请求新文件时检查并删除旧文件

旧文件的标识可能基于数据库中的文件时间或相关值。无论哪种方式,如果可能有很多文件要处理,那么如果不太可能识别出很多要删除的文件,则不太可能需要频繁检查的开销。
另外,一定要尽快消除大量文件的后果磁盘空间真的是个问题吗?防止在仍然需要时删除这些文件或通过热心地检查来创建性能副作用的副作用。

您不能立即删除该文件,因为它可能尚未下载。从服务器端,没有简单的方法可以判断文件是否已成功下载。如果浏览器打开了“打开/保存”对话框,该怎么办?在确认对话框之前,不会开始下载。此操作可能不会立即执行和/或取消对话框 或者,如果它是一个大文件,并且在完全下载之前连接已断开,该怎么办?是否可以再次尝试下载

处理您的情况通常建议的方法是,在一段时间后,作为一个单独的过程进行删除,这样您可以相当确定不再需要该文件,并且/或者在需要时可以重新创建/恢复该文件

根据您的情况,您可以有一个单独的流程 dicaly删除/处理旧文件。或者,如果您的流量较低,您可以在每次请求新文件时检查并删除旧文件

旧文件的标识可能基于数据库中的文件时间或相关值。无论哪种方式,如果可能有很多文件要处理,那么如果不太可能识别出很多要删除的文件,则不太可能需要频繁检查的开销。
另外,一定要尽快消除大量文件的后果磁盘空间真的是个问题吗?防止在仍然需要时删除它们或通过热心地检查来创建性能副作用的副作用。

运行此页面代码是否有效。而不是执行response.end运行response.redirect~/page for delete.aspx?file=delete.dat,false;-通过添加false,您将继续处理此页面上的信息。@Kieran,TransmitFile将在文件传输和响应时终止响应。重定向将导致响应冲突。运行此页面代码是否可行。而不是执行response.end运行response.redirect~/page for delete.aspx?file=delete.dat,false;-通过添加false,您将继续处理此页面上的信息。@Kieran,TransmitFile将在文件传输和响应时终止响应。重定向将导致响应冲突。抱歉,请尝试仅响应。Flushok第一部分工作正常。。。但是不使用response endResponse有什么问题吗?End在这种情况下什么都不做,这是一个多余的行。对不起,请尝试只使用response。Flushok第一部分工作了。。。但是不使用response endResponse有什么问题吗?在这种情况下End什么都不做,它是一条冗余线路。