2009-01-31 15 views
12

Istnieje kilka możliwych sposobów na uzyskanie ścieżkę do katalogu danych aplikacji:Najlepszy sposób uzyskania ścieżki do katalogu "Dane aplikacji"?

  • korzystanie ze środowiska %APPDATA% zmienną
  • wzywającą SHGetFolderPath z CSIDL_APPDATA

Jaki jest najlepszy sposób, aby uzyskać ścieżkę z poziomu programu? Czy są jakieś błędy, kiedy używam zmiennej środowiskowej?

Która metoda jest najbezpieczniejsza w systemach XP, Vista i nadchodzących wersjach?

Odpowiedz

12

Sugeruję, że wywołanie SHGetFolderPath() jest najbardziej odpowiednią i przenośną metodą; alternatywy, takie jak czytanie zmiennej środowiskowej, lub (co gorsza) próba wydobycia jej z rejestru, prawdopodobnie podniosą cię w przyszłości.

Raymond Chen has an article wyjaśnienie, dlaczego wyciąganie takich ścieżek z rejestru jest złym pomysłem.

+1

czytałem artykuł, a ja wcześniej zrobiłem dokładnie to, co powiedział mi artykuł * nie * zrobić :) –

0

Jeśli programowanie w .NET można użyć to:

string appDataPath = Environment.SpecialFolder.ApplicationData; 
+0

SpecialFolder.ApplicationData jest wylicznikiem, a nie ścieżką. Użyj Environment.GetFolderPath, jak pokazano w odpowiedzi @ jMM – JulianM

0

jedną istotną różnicą w Pythonie: w przypadku ścieżek plików Unicode ctypes.windll.shell32.SHGetFolderPathW Zwraca ciąg znaków Unicode, natomiast os.environ['APPDATA'] zwraca ciąg bajtów.

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

Musisz użyć metody GetFolderPath uzyskać rzeczywiste ścieżkę Environment.SpecialFolder.ApplicationData to tylko wyliczenia.

0

na wypadek gdyby ktoś był zastanawiasz się, w Ruby polecenie będzie wyglądać następująco:

appDataPath = ENV['APPDATA'] 
Powiązane problemy