Удаление временного файла, открытого c # - PullRequest
1 голос
/ 03 июня 2011

Я записал несколько PDF-файлов во временный каталог, и они отображаются в виде эскиза, который может просматривать пользователь. Когда я закрываю свою форму, я очищаю все файлы из временного каталога.

Если, однако, пользователь открыл одну из миниатюр, а затем закрыл мое приложение - он удаляет файлы, а затем выдает исключение, потому что файл PDF открыт в другом процессе и не может быть очищен.

Полагаю, это шокирующее решение для меня, но я все еще новичок! Как мне учесть это в моем коде?

Спасибо

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Вы можете определить, используется ли файл, используя код, аналогичный приведенному ниже, а затем использовать его, чтобы предупредить пользователя о невозможности удаления файла.К сожалению, вы не можете удалить используемый файл.

    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;
    }
0 голосов
/ 03 июня 2011

Инструменты типа File Unlocker могут освободить файл. Однако я думаю, что это может сделать программы в зависимости от сбоя файла ...

Может быть, вы можете посмотреть, как они разблокируют файлы или выполнить разблокировку с помощью Process.Start, чтобы разблокировать ваш файл и удалить его.

Однако, если вы блокируете файл, вы должны попытаться исправить это в своей программе. Возможно, вам следует избавиться от всех загруженных файлов (файловых потоков и т. Д.), Прежде чем пытаться их очистить.

0 голосов
/ 03 июня 2011

Вы должны перехватить это исключение (в блоке catch вы можете сообщить пользователю закрыть этот файл, иначе он не будет удален), и, если временный каталог принадлежит вам, вы можете попытаться удалить его при запуске приложения (или когда оно заканчивается снова). ), если это временный каталог Windows, то это не имеет большого значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...