2010-04-06 3 views
6

Не совсем программирования вопрос, но его достаточно близко, так что здесь идет:приложений Windows каталог данных

В Mac OS я надену файлы пользователя для моего приложения в ~/Library/Application Data/{MyApp}/ и * Никс Я положу их в ~/.{MyApp}/ - где я должен положить их для Windows?

Я буду использовать Ruby's File.expand_path, чтобы добраться до этого каталога, поэтому, если есть эквивалент Windows ~, тогда это нормально.

(ответы для Windows XP, Vista и 7 будут оценены, если они не совпадают)

ответ

3

То, как это сделать в Windows, заключается в использовании переменной среды ApplicationData. Если вы использовали C#, вы можете получить папку, в которую он сопоставляется, с использованием System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), поисковой системой для Ruby-эквивалента является ENV['APPDATA']. В английском языке Windows, он отображает до:

C:\Users\%username%\AppData\Roaming\ (на Vista, и Windows 7)

C:\Documents and Settings\%username%\Application Data\ (На XP)

Это может отображаться в другой папке на других языках, но до тех пор, как вы получить каталог из переменной окружения, а не жестко-кодировать его, тогда это действительно не имеет значения. Если вы создадите папку для своего приложения и сохраните там данные, Vista и 7 разрешат доступ на чтение и запись без предоставления приглашений UAC.

+1

Просто прошу не жестко закодировать пути, перечисленные в miket2e, вместо этого используйте Environment.SpecialFolder.ApplicationData для .net-приложений или ShGetFolderPath (NULL, CSIDL_APPDATA, NULL, ...) для собственных приложений Windows. –

+0

А в Рубине? На данный момент мне придется жестко закодировать ~/AppData/MyApp, поскольку я не знаю, как установить папку данных приложения в Ruby! –

0

Навскидку, я не знаю, как рубин ручки expand_path на ~ для Windows. У Windows есть такие функции, как SHGetSpecialFolderPath, и SHGetSpecialFolderLocation для такого рода вещей. Казалось бы, очевидно, что для expand_path использовать один из них, но я не знаю, уверен ли он.

+1

Один nit, но SHGetSpecialFolderPath устарел в пользу ShGetFolderPath (http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx). –

+0

@ Larry: Хороший вопрос - я должен был упомянуть об этом. Спасибо, что добавил. –

0

для Vista и Windows 7 и Windows XP,

char appdir[MAX_PATH];  
    size_t requiredSize; 
    errno_t err= getenv_s(&requiredSize, appdir, MAX_PATH, "appdata"); 

кажется проще, чем при использовании устаревших API, или те, которые не работают на Windows XP.

Смежные вопросы