2010-04-06 11 views
6

Non del tutto una questione di programmazione, ma abbastanza la sua stretta quindi ecco qui:di Windows Application Data Directory

In Mac OS Metterò i file specifici dell'utente per la mia app in ~/Library/Application Data/{MyApp}/ e in * nix Io li metterò in ~/.{MyApp}/ - dove dovrei metterli per Windows?

Userò Ruby File.expand_path per arrivare a questa directory, quindi se c'è un equivalente di Windows di ~ allora va bene.

(Risposte per Windows XP, Vista e 7 sarebbe apprezzato se non sono la stessa cosa)

risposta

3

Il modo in cui eseguire questa operazione su Windows è utilizzare la variabile di ambiente ApplicationData. Se stavi usando C# puoi ottenere la cartella su cui è mappata usando System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), googling per l'equivalente Ruby è ENV['APPDATA']. In Windows in lingua inglese si associa a:

C:\Users\%username%\AppData\Roaming\ (su Vista e Windows 7)

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

Può mappare una cartella diversa in altre lingue, ma fino a quando si recupera la directory dalla variabile d'ambiente e non la codifica, quindi non fa davvero la differenza. Se crei una cartella per l'app e memorizzi i dati, Vista e 7 consentiranno l'accesso in lettura e scrittura senza fornire prompt UAC.

+1

Solo per favore non programmare a fondo i percorsi che miket2e elencano, ma usa Environment.SpecialFolder.ApplicationData per .net apps o ShGetFolderPath (NULL, CSIDL_APPDATA, NULL, ...) per le app native di Windows. –

+0

E in Ruby? Al momento dovrei scrivere hard-code ~/AppData/MyApp perché non conosco la cartella dati dell'applicazione in Ruby! –

0

Lì per lì, io non sono sicuro di come Rubino gestisce expand_path su ~ per Windows. Windows ha funzioni come SHGetSpecialFolderPath e SHGetSpecialFolderLocation per questo genere di cose. Sembrerebbe una cosa ovvia per expand_path usare uno di questi, ma non so se lo farà di sicuro.

+1

Un nit, ma SHGetSpecialFolderPath è obsoleto in favore di ShGetFolderPath (http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx). –

+0

@Larry: buon punto - avrei dovuto dirlo. Grazie per averlo aggiunto. –

0

per Vista e Windows 7 e Windows XP,

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

sembra più semplice che utilizzando le API o quelli obsoleti che non funzionano su Windows XP.

Problemi correlati