Как предотвратить автоматическое удаление файлов, созданных с именем GetTempFileName при перезагрузке
Наше приложение собирает данные с внешнего устройства. Эти данные в основном хранятся в памяти, но помещаются на диск во временных файлах до тех пор, пока пользователь явно не сохранит данные. Это должно обеспечить некоторый шанс восстановления, если приложение по какой-либо причине аварийно завершает работу. Вообще говоря, это работает просто отлично.
В последнее время мы обнаружили, благодаря тому, что Windows становится все более настойчивой в отношении автоматических обновлений, что эти файлы удаляются автоматически во время перезагрузки. Так что если Windows убивает наше приложение для автоматического применения обновлений, временные файлы, которые позволили бы восстановление исчезли после перезагрузки.
Я проверил проблему, убив приложение нарочно и перезагрузившись; действительно, временные файлы исчезли после перезагрузки.
Файлы создаются с помощью вызова Win32 API GetTempFileName
, а также GetTempPath
. Все, что я читал на эту тему, говорит, что эти файлы не автоматически удаляются когда-либо, но они явно удаляются. удаленный.
Что я могу сделать, чтобы остановить это? Или я должен просто изменить место хранения наших данных о безопасности?
2 ответа:
Лучшим решением IMO является не использование временной папки, которая содержит (как следует из названия) временные файлы, которые могут быть удалены без каких-либо последствий.
Вместо этого вы должны хранить их где-то в папке LocalAppdata.
Используйте функцию SHGetFolderPath для получения фактического расположения папки LocalAppData.
В LocalAppData создайте папку, имя которой соответствует названию вашей компании и/или продукта, или некоторому сочетанию того и другого, и сохраните все ваши данные. псевдо временные файлы там.
То, что вы видите, - это новая функция "смысл хранения", добавленная в Windows 10.
Как автоматически очистить временные файлы в Windows 10 .
Windows 10 получила возможность автоматически очищать временные файлы в последней сборке. Начиная с сборки 15014, в настройках появилась новая опция.
При включении он может быть настроен на очистку таких элементов, как временные файлы, корзина и т. д. Вы можете отключить их индивидуально.
В качестве альтернативы можно было бы изменить ваше приложение, чтобы сохранить его временные файлы в несистемной временной папке, которую вы контролируете, а не использовать
GetTempPath()
. И, возможно, также использовать что-то другое, чемGetTempFileName()
, чтобы создать ваши временные имена файлов (например, используя дату/время или GUID вместо этого), так что Windows, возможно, не сможет отслеживать временные файлы, которые вы создаете. Тогда, возможно, Ваши файлы не будут удалены автоматически хранилищем Смысла больше нет.