【问题标题】:Deleting a temp file that is open c#删除打开的临时文件c#
【发布时间】:2011-06-03 08:44:23
【问题描述】:

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

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

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

谢谢

【问题讨论】:

标签: c# file-io


【解决方案1】:

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

    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;
    }

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这很重要,因为下次用户搜索数据时,此 pdf 将弹出,并且与他们所做的搜索无关
    【解决方案3】:

    File Unlocker 等工具可以释放文件。但是我认为这可能会使程序根据文件崩溃...

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

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

    【讨论】:

    • 链接失效
    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多