2010-04-06 12 views
6

No del todo una cuestión de programación, pero es lo suficientemente cerca como para que aquí va:Directorio de datos de aplicaciones de Windows

En Mac OS Voy a poner los archivos específicos del usuario para mi aplicación en ~/Library/Application Data/{MyApp}/ y en * nix pondré en ~/.{MyApp}/ - ¿dónde debería ponerlos para Windows?

Usaré Ruby's File.expand_path para acceder a este directorio, por lo que si hay un equivalente de Windows de ~, está bien.

(Respuestas para Windows XP, Vista y 7 serán bienvenidos si no son lo mismo)

Respuesta

3

La manera de hacerlo en Windows es utilizar la variable de entorno ApplicationData. Si usaba C#, puede obtener la carpeta a la que asigna utilizando System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), buscando en Google el equivalente de Ruby es ENV['APPDATA']. En Windows en idioma Inglés que lo mapea:

C:\Users\%username%\AppData\Roaming\ (en Vista y Windows 7)

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

Se puede asignar a una carpeta diferente en otros idiomas, pero siempre y cuando se obtener el directorio de la variable de entorno y no codificarlo, entonces realmente no hace la diferencia. Si crea una carpeta allí para su aplicación y almacena allí los datos, Vista y 7 permitirán el acceso de lectura y escritura sin dar indicaciones de UAC.

+1

Simplemente no codifique las rutas que miket2e enumeró, sino que use Environment.SpecialFolder.ApplicationData para aplicaciones .net o ShGetFolderPath (NULL, CSIDL_APPDATA, NULL, ...) para aplicaciones de Windows nativas. –

+0

Y en Ruby? Por el momento, tendría que codificar ~/AppData/MyApp, ya que no conozco ninguna forma de acceder a la carpeta de datos de la aplicación en Ruby. –

0

A primera vista, no estoy seguro de cómo maneja Rubí expand_path en ~ para Windows. Windows tiene funciones como SHGetSpecialFolderPath y SHGetSpecialFolderLocation para este tipo de cosas. Parece una cosa obvia para expand_path usar uno de esos, pero no sé si es seguro.

+1

One nit, pero SHGetSpecialFolderPath está en desuso en favor de ShGetFolderPath (http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx). –

+0

@Larry: Buen punto - Debería haber mencionado eso. Gracias por agregarlo. –

0

para Vista y Windows 7 y Windows XP,

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

parece más simple que el uso de las API o los obsoletos que no funcionan en Windows XP.

Cuestiones relacionadas