Jako programista, jak należy używać specjalnych folderów w systemie Windows Vista (i Windows 7)?

Gdzie powinienem zapisać dane związane z moją aplikacją? Gdzie powinienem zapisać pliki konfiguracyjne? Gdzie powinienem zapisać pliki tymczasowe? Mam to zrobić w "dokumentach"? "AppData"? Itd...

Jaka jest najlepsza praktyka zapisywania danych na dysk (chyba najlepsza praktyka dla specjalnych folderów?!)?

Author: Peter Mortensen, 2009-10-12

5 answers

ApplicationData: wszystko, czego potrzebuje Twoja aplikacja jako dane "na użytkownika" i nie należy do innych kategorii. Standardowe pliki konfiguracyjne trafią tutaj.

Common Applicationdata: wszystko, co nie jest danymi "na użytkownika".

Localaplicationdata: Danych przypadających na użytkownika i nie korzystających z roamingu. Na przykład wszystko, co chcesz mieć pewność, że jest przechowywane tylko na tym komputerze (np. kody aktywacyjne maszyny, często również cache/dane tymczasowe). Standardowe pliki tymczasowe trafią tutaj.

MyDocuments: Dane Użytkownika, które użytkownik faktycznie określiłby jako "rozpoznawalne pojedyncze dokumenty".

Jeśli nie zależy ci na nazwie pliku, możesz również użyć interfejsu API tempfile do wygenerowania pliku tymczasowego w katalogu temp. Nie należy tego robić ręcznie. Na przykład w . NET możesz użyć w tym celu Path.GetTempFileName().

 27
Author: Foxfire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-14 15:54:22

From Windows 7 Client Software Logo Program :

  • aplikacje powinny być domyślnie instalowane w folderze Program Files. Dane użytkownika lub dane aplikacji nigdy nie mogą być przechowywane w tej lokalizacji ze względu na uprawnienia zabezpieczeń %ProgramFiles% dla natywnych aplikacji 32-bitowych i 64-bitowych oraz %ProgramFiles(x86)% dla aplikacji 32-bitowych uruchomionych na x64, odpowiednio nadpisując swoje dane i ustawienia.
  • Wszystkie dane aplikacji, które muszą być udostępniane użytkownikom na komputerze powinny być przechowywane w ProgramData
  • Wszystkie dane aplikacji wyłącznie dla konkretnego użytkownika i nie mogą być udostępniane innym użytkownikom komputera muszą być przechowywane w Users \ \ AppData
  • Nigdy nie zapisuj bezpośrednio do katalogu i podkatalogów" Windows". Używaj odpowiednich metod instalacji plików, takich jak czcionki lub sterowniki
  • w instalacjach" per-machine " dane użytkownika muszą być zapisywane przy pierwszym uruchomieniu, a nie podczas instalacji. Dzieje się tak dlatego, że nie ma poprawną lokalizację użytkownika do przechowywania danych w momencie instalacji. Próby zmodyfikowania domyślnych zachowań asocjacyjnych na poziomie komputera przez aplikację po instalacji nie powiodą się. Zamiast tego, wartości domyślne muszą być deklarowane na poziomie poszczególnych Użytkowników, co uniemożliwia wielokrotnym użytkownikom nadpisywanie wartości domyślnych.
 10
Author: Remus Rusanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-12 18:44:47

AppData powinna być automatyczną konfiguracją i profilami, dokumenty powinny być tylko plikami zapisanymi przez użytkownika. Chciałbym umieścić wszystko, co może być przydatne w wielu systemach w AppData / Roaming,a Wszystko inne (specyficzne dla maszyny) W AppData / LocalLow lub LocalLow. W przypadku plików tymczasowych użyj katalogu tymczasowego.

 1
Author: Jim Deville,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-12 18:20:57

Ogólnie rzecz biorąc, najlepsze praktyki systemu Windows są zgodne z odpowiednimi zmiennymi środowiskowymi. Dane konfiguracyjne, które chcesz trzymać, powinny znaleźć się w %APPDATA%, a pliki tymczasowe powinny znaleźć się w %TEMP%.

To ma tę zaletę, że nie psuje się strasznie, jeśli Windows zmienia rzeczy i szanuje dziwne konfiguracje, które ludzie mogą mieć.

Zgadzam się również z innymi odpowiedziami, że "dokumenty" powinny być tylko dla danych utworzonych przez użytkownika i tylko po monicie.

 1
Author: Clueless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-12 18:25:25

DODATKOWO powinieneś użyć SHGetFolderPath lub SHGetKnownFolderPath (w Vista+), aby uzyskać ścieżki. Zapewni to poprawną lokalizację w bieżącym systemie niezależnie od wersji lub języka bieżącej instalacji. Nigdy nie koduj twardo żadnej ścieżki, której używasz.

 0
Author: Fox Cutter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 19:07:54