2009-01-31 2 views
12

Есть несколько возможных способов получения пути к каталогу данных приложения:Лучший способ получить путь к каталогу данных приложения?

  • используя %APPDATA% переменных окружения
  • призывающих SHGetFolderPath с CSIDL_APPDATA

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

Какой способ безопасен в отношении XP, Vista и будущих версий?

ответ

12

Я бы предположил, что вызов SHGetFolderPath() является наиболее подходящим и переносимым методом; альтернативы, такие как чтение переменной окружения или (что еще хуже), попытка извлечь ее из реестра, скорее всего, заставят вас в будущем.

Raymond Chen has an article поясняет, почему вытаскивание таких путей из реестра - плохая идея.

+1

Я прочитал статью, и я ранее я сделал именно то, что эта статья сказал мне * не * делать :) –

0

Если вы программируете в .NET вы можете использовать это:

string appDataPath = Environment.SpecialFolder.ApplicationData; 
+0

SpecialFolder.ApplicationData - это перечисление, а не путь. Используйте Environment.GetFolderPath, как показано в ответе @ jMM. – JulianM

0

Одно важное отличие в Python: в случае путей юникода файла ctypes.windll.shell32.SHGetFolderPathW возвращает строку Юникода, в то время как os.environ['APPDATA'] возвращает строку байтов.

12
string appDataPath = 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

Вы должны будете использовать метод GetFolderPath получить фактический путь, Environment.SpecialFolder.ApplicationData это просто перечисление.

0

В случае, если кто был интересно, в Ruby, то команда будет выглядеть следующим образом:

appDataPath = ENV['APPDATA'] 
Смежные вопросы