删除打开的临时文件c#

时间:2011-06-03 08:44:23

标签: c# file-io

我已将一些pdf文件写入临时目录,这些文件显示为用户可以查看的缩略图。当我关闭我的表单时,我清理临时目录中的所有文件。

但是,如果用户打开其中一个缩略图然后关闭我的应用程序 - 它会删除文件然后抛出异常,因为pdf在另一个进程中打开而无法清除。

我想我这是一个令人震惊的编程决定,但我仍然是新手!我应该如何在我的代码中解释这一点?

由于

3 个答案:

答案 0 :(得分:2)

您可以使用类似于下面的代码检测文件是否正在使用,然后使用该代码警告用户无法删除文件。 遗憾的是,您无法删除正在使用的文件。

    public static bool IsFileInUse(string pathToFile)
    {
        if (!System.IO.File.Exists(pathToFile))
        {
            // File doesn't exist, so we know it's not in use.
            return false;
        }

        bool inUse = false;
        System.IO.FileStream fs;
        try
        {
            fs = System.IO.File.Open(pathToFile, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Read, System.IO.FileShare.None);
            fs.Close();
        }
        catch (System.IO.IOException ex)
        {
            string exMess = ex.Message;
            inUse = true;
        }
        return inUse;
    }

答案 1 :(得分:0)

你应该捕获该异常(在catch块中你可以通知用户关闭该文件或者它不会被删除),如果临时目录是你的,你可以尝试在应用程序启动时删除它(或者当它再次结束时删除它) ),如果它的Windows临时目录,那么它没关系那么多

答案 2 :(得分:0)

File Unlocker这样的工具可以发布文件。但是我认为这可能使程序取决于文件崩溃...

也许您可以通过Process.Start查找他们如何解锁文件或设法执行解锁程序来解锁文件并将其删除。

但是,如果您阻止该文件,则应尝试在程序中修复此问题。也许你应该在尝试清理它之前处理所有加载的文件(文件流等)。