Как узнать следующий временный файл, который будет создан в Windows? - PullRequest
1 голос
/ 27 мая 2010

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

Спасибо,

Майк

Ответы [ 4 ]

3 голосов
/ 27 мая 2010

Нет прямого способа узнать следующее временное имя файла, которое будет создано.

Например, программисты используют метод System.IO.Path.GetTempFileName, но можно добавить специфичные для приложения префиксы или суффиксы, чтобы приложению было легче находить вновь созданные файлы.

Можно даже сохранить этот временный файл в другом месте, кроме системной временной папки.

1 голос
/ 27 мая 2010

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

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

Если вы ограничите определение только теми файлами, которые названы Windows, возможно, вы сможете получить что-нибудь. Но действительно ли это отвечает вашим потребностям?

После всего этого, возможно, было бы лучше описать проблему, которую вы пытаетесь решить. Может быть гораздо лучшее (работоспособное) решение, которое решило бы проблему.

1 голос
/ 27 мая 2010

Обычно приложения используют Win32 API GetTempFileName для получения временного каталога. Там описан процесс создания временного файла.

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

0 голосов
/ 27 мая 2010

Этот вид кода просто не может работать надежно в многозадачной операционной системе. Другой поток в другом процессе может прервать ваш и потребовать имя файла, который вы надеетесь создать.

В остальном это достаточно просто обойти, просто назовите свои собственные файлы, а не полагайтесь на то, что Windows сделает это за вас. Сделайте это в папке AppData, чтобы минимизировать риск того, что другой процесс испортит его.

...