如何使用 Asp.net 删除临时文件

Posted

技术标签:

【中文标题】如何使用 Asp.net 删除临时文件【英文标题】:How to delete temporary files using Asp.net 【发布时间】:2010-02-18 06:30:13 【问题描述】:

在我的应用程序中,我有一些需要经常查看的报告。不同用户多次查看报告后,它显示加载错误。对于不同的系统,创建了许多临时文件。我需要删除这些文件我的单系统。现在我手动删除临时目录中的所有临时文件并重新配置 IIS。然后报告正确加载。但是我们需要经常删除这些临时文件,这让我们的生活变得可怕。只有报告文件需要已删除。如何使用代码自动删除这些临时文件?

我已经使用了以下代码。但是有些文件正在使用中,无法删除。其他系统中的那些临时文件会导致我们系统中的加载错误吗?我该如何解决这个问题?

dim temp as string=Environment.GetEnvironmentVariable("TEMP")
dim k as sting()=System.IO.Directory.GetFiles(temp)
dim i as integer

For i=0 to k.length
    On Error Resume Next
    If k(i).Contains(".rpt") then
        kill(k(i))
        System.IO.File.Delete(k(i))
Next

【问题讨论】:

如果在使用中,如何手动删除?这也不是一个好的解决方案。为什么仅在 5/6 次重新加载后就变得很重? @Shoban,我编辑了我的问题。请看 【参考方案1】:

从 Application_Start() 创建一个线程(或编写一个独立的 exe)

您可以自动执行您手动执行的操作。 您可以使用一个非常简单的程序删除这些文件,修改日期较旧,每小时一次。

【讨论】:

我同意您可以在应用程序启动时运行一个单独的应用程序线程,该线程会定期检查您的文件夹并清除它。唯一的挑战是您的删除例程是否试图删除当前正在访问的文件。您可以通过查看时间戳并清除您确定用户未访问的旧文件来减少该问题。【参考方案2】:

假设您将这些临时文件呈现给用户,我建议您创建一个 HTTP 处理程序。该处理程序将提供生成文件并将其交付给用户以供下载或在浏览器中查看的能力。这种方法允许自定义缓存。

下面的示例仅显示处理程序部分,这是最基本的,因为它没有进入文件创建,因为我不确定您当前是如何创建文件的。您可以发送某种流。

示例:(对不起,在 C# 中,但您可以从这里开始。)

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.IO;

namespace Handlers

    /// <summary>
    /// Summary description for $codebehindclassname$
    /// </summary>
    [WebService(Namespace = "http://www.tempuri.com/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class ColorImage : IHttpHandler
    
        public bool IsReusable  get  return true;  

        public void ProcessRequest(HttpContext context)
        
            Bitmap bmGenerate = CreateBitmapMethod();
            context.Response.ContentType = "image/png";
            context.Response.AddHeader("Response-Type", "image/png");

            using (MemoryStream memoryStream = new MemoryStream())
            
                bmGenerate.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                memoryStream.WriteTo(context.Response.OutputStream);
            
        
    

【讨论】:

很抱歉听到这个消息,不确定什么是不正确的。我在几个应用程序中使用了类似的解决方案。我不会依赖我上面的代码,但它应该给你一个开始。我坚持使用 HTTP 处理程序的建议。

以上是关于如何使用 Asp.net 删除临时文件的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 Access Db 的临时 ldb 文件

ASP.NET - 如何在浏览器中显示图像而不将图像保存在临时文件中?

更改 ASP.NET 临时文件文件夹位置

临时 Asp.Net 文件的 ApplicationPoolIdentity 权限

如何存储由我的 ASP.NET 模块操作的临时数据?

以中等信任度在 ASP.NET 中存储临时用户文件