Теперь я застрял и не знаю, что делать, чтобы убедиться, что временный файл автоматически исчезает, когда патчер не работает.Как мне сделать это правильно?
Не существует гарантированных способов сделать это, поскольку многие вещи, не зависящие от приложения, могут привести к его выходу.Сбой питания или паника ядра из-за какой-либо аппаратной проблемы могут привести к сбою компьютера или его перезапуску.
Общепринятая стратегия заключается в реализации проверки запуска программы на наличие статуса предыдущего запуска.,Некоторые приложения создают файл блокировки при запуске и удаляют его при корректном выходе.Если этот файл блокировки существует при перезапуске программы, это означает, что предыдущий запуск не привел к чистому завершению, и приложение может предпринять любые корректирующие действия.Точное действие зависит от характера приложения, некоторые отказываются запускаться, другие предупреждают пользователей.
Я бы тоже хотел спросить, где в Windows лучше всего написатьвременный файл?
Каждая ОС имеет свое собственное расположение для временных файлов.Если вы исключите аргумент dir
для TempFile
, он будет создан в соответствующем месте, как указано в документации 1016 *:
TempFile
создает новый временныйфайл в каталоге dir, открывает файл для чтения и записи и возвращает полученный *os.File
.Имя файла генерируется путем взятия шаблона и добавления случайной строки в конец.Если шаблон включает "*"
, случайная строка заменяет последнюю "*"
. Если dir - пустая строка, TempFile
использует каталог для временных файлов по умолчанию (см. os.TempDir
). Несколько программ, вызывающих TempFile
одновременно, не будут выбирать один и тот же файл.Вызывающий может использовать f.Name()
, чтобы найти путь к файлу.Вызывающий абонент должен удалить файл, когда он больше не нужен.
С os.TempDir
мы видим следующее:
В системах Unix, он возвращает $TMPDIR
, если не пуст, иначе /tmp
.В Windows он использует GetTempPath
, возвращая первое непустое значение из %TMP%
, %TEMP%
, %USERPROFILE%
или каталога Windows.В плане 9 он возвращает /tmp
.
Каталог не гарантированно не существует и не имеет доступных разрешений.