2010-04-06 2 views
6

Nicht ganz eine Programmierung Frage, aber seine nahe genug, so hier geht:Windows-Anwendungsdatenverzeichnis

In Mac OS werde ich benutzerspezifische Dateien für meine Anwendung in ~/Library/Application Data/{MyApp}/ und in * nichts setzen werde ich sie setze in ~/.{MyApp}/ - wo sollte ich sie für Windows?

Ich werde Ruby File.expand_path verwenden, um zu diesem Verzeichnis zu gelangen, also wenn es ein Windows-Äquivalent von ~ gibt, dann ist das in Ordnung.

(Antworten für Windows XP, Vista und 7 würde geschätzt werden, wenn sie nicht gleich sind)

Antwort

3

Die Möglichkeit, dies unter Windows zu tun, ist die Umgebungsvariable ApplicationData. Wenn Sie C# verwenden, können Sie den Ordner abrufen, in dem es sich befindet, indem Sie System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) suchen und nach dem Ruby-Äquivalent suchen, das es ENV['APPDATA'] ist. In englischsprachigen Windows-es abbildet:

C:\Users\%username%\AppData\Roaming\ (unter Vista und Windows 7)

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

Es in einem anderen Ordner in anderen Sprachen abbilden, aber so lange, wie Sie Holen Sie das Verzeichnis von der Umgebungsvariablen und nicht hard-code es dann macht es keinen Unterschied. Wenn Sie dort einen Ordner für Ihre App erstellen und die Daten dort speichern, ermöglichen Vista und 7 Lese- und Schreibzugriff darauf, ohne dass UAC-Eingabeaufforderungen angezeigt werden.

+1

Bitte kodieren Sie nicht die Pfade, die miket2e aufgelistet hat - verwenden Sie Environment.SpecialFolder.ApplicationData für .net-Anwendungen oder ShGetFolderPath (NULL, CSIDL_APPDATA, NULL, ...) für native Windows-Apps. –

+0

Und in Ruby? Im Moment müsste ich ~/AppData/MyApp fest codieren, da ich in Ruby keinen Weg zum Anwendungsdatenordner finde! –

0

Offhand, ich bin nicht sicher, wie Ruby-expand_path auf ~ für Windows behandelt. Windows hat Funktionen wie SHGetSpecialFolderPath und SHGetSpecialFolderLocation für diese Art von Sache. Es scheint offensichtlich zu sein, dass expand_path einen davon benutzt, aber ich weiß nicht, ob es sicher ist.

+1

Ein nit, aber SHGetSpecialFolderPath ist zugunsten von ShGetFolderPath veraltet (http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx). –

+0

@Larry: Guter Punkt - ich hätte das erwähnen sollen. Danke, dass du es hinzugefügt hast. –

0

für Vista und Windows 7 und Windows XP,

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

scheint einfacher als veraltet APIs oder solche verwenden, die unter Windows XP funktionieren nicht.