Как я могу удалить временные файлы, которые все еще открыты в других программах? - PullRequest
3 голосов
/ 02 июля 2010

Моя программа записывает временные файлы PDF (используя Path.GetTempFileName), которые затем передаются в обработчик PDF по умолчанию (обычно Adobe Reader) для отображения. У меня есть метод finally в моем методе Main для удаления временных файлов, но если Adobe Reader все еще открыт, когда моя программа закрывается, файлы остаются открытыми и не могут быть удалены.

Одним из решений было бы просто оставить их там и предположить, что пользователь когда-нибудь очистит свою временную папку; файлы всего 1,5 МБ каждый. Но есть ли лучший способ?

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

Ответы [ 2 ]

2 голосов
/ 02 июля 2010

См. Статью базы знаний Как переместить файлы, которые используются в данный момент . Как указано выше, вам нужно будет использовать другой метод для NT (который включает в себя 2000, XP, Vista и Windows 7) и для устаревших версий ОС, если ваше приложение все еще работает на них.

Pinvoke.net имеет управляемые определения для вызовов Win32 API и задействованных констант.

0 голосов
/ 02 июля 2010

Можете ли вы зарегистрировать или сохранить открытые файлы, а затем в следующий раз, когда ваше приложение запустится, попытаться удалить временные файлы PDF?Поэтому в следующий раз сделайте так, чтобы ваше приложение позаботилось о порядке.Пользователь должен закрыть его к тому времени.

...