Подходящее место для кэша моего приложения в Windows - PullRequest
3 голосов
/ 20 ноября 2008

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

Какое местоположение подходит для такого кэша? Есть ли API для определения подходящего местоположения? Как мне вызвать его из Python?

Ответы [ 6 ]

3 голосов
/ 20 ноября 2008

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

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

2 голосов
/ 20 ноября 2008

Посмотрите здесь: http://en.wikipedia.org/wiki/Environment_variable#User_management_variables. Все, что находится в каталоге пользователя, хорошо Если это для всех пользователей, то это должно быть:% ALLUSERSPROFILE%. Если это для конкретного пользователя, убедитесь, что права являются правильными.

Проверьте MSDN для получения дополнительной информации о других версиях Windows. Переменные среды могут варьироваться от системы к системе.

2 голосов
/ 20 ноября 2008

Стандартное расположение приложения Windows для хранения данных (постоянных) данных приложения указано в переменных среды %APPDATA% (текущий пользователь) или %ALLUSERSPROFILE% (все пользователи). Вы можете получить к ним доступ, используя, например, (только элементарная и не очень элегантная проверка ошибок!):

import os
app_path = os.getenv("APPDATA") + "\\MyApplicationData"
try:
    os.mkdir(app_path)
except WindowsError:
    # already exists

Теперь у вас есть собственный каталог для вашего приложения.

1 голос
/ 20 ноября 2008

Модуль wx.StandardPaths содержит методы, которые возвращают различные стандартные местоположения в файловой системе и прозрачно пытается сделать «правильные вещи» в Unix, Mac OS X и Windows.

1 голос
/ 20 ноября 2008

Возможно, модуль tempfile обеспечивает то, что вам нужно. Он использует каталог Windows Temp (который, вероятно, отсутствует на сетевом диске), но вы можете указать каталог, если хотите. Также по соображениям безопасности этот модуль должен быть подходящим инструментом - если вы используете tempfile.mkstemp(), файл доступен для чтения и записи только при создании идентификатора пользователя.

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

0 голосов
/ 20 ноября 2008

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

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

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