windows - Best Cross Platform måde at hente OS version i C ++

Indlæg af Hanne Mølgaard Plasc

Problem



Hej, jeg er lidt ny til C ++ og skriver et simpelt program. Mit program bruger nogle mapper i





Windows 7-sti: C: \ Users \\% brugernavn\% \ Appdata \ Local ...


Windows XP-sti: C: \ Dokumenter og indstillinger \\% brugernavn\% \ Lokale indstillinger \ Programdata ...


Unix:/home/\% brugernavn\%/. Hiddenfolder/...





nu er problemet windows. I min header-fil kan jeg gøre det godt


#ifdef \_WIN32


at skelne fra Windows og Unix versioner af programmet, men i løbet af runtime skal jeg finde ud af om brugeren bruger XP eller Vista/7 til at indstille en korrekt vej. Er der en standard måde at gøre dette på?

Bedste reference


Du behøver slet ikke OS version.


På * nixes (vel, på Linux og OSX sikkert, men også på andre) kan du bruge HOME miljøvariabel. På Windows skal du (ja, skal , fordi stier kan genbepilles/lokaliseret og hardkodende, det er en god måde at have mere arbejde på end nødvendigt) bruge SHGetFolderPath funktionen markeret som forældet, men det går ikke nogen gang helst, og nyere SHGetKnownFolderPath er>=Vista), fx [7]


TCHAR buffer[MAX\_PATH];
HRESULT res = SHGetFolderPath(
    NULL, CSIDL\_APPDATA, NULL, SHGFP\_TYPE\_CURRENT, buffer
);

if (SUCCEEDED(res)) {
    // ...
}

Andre referencer 1


Versionsdetektering er hverken nødvendig eller tilstrækkelig, da disse indstillinger kan ændres fra deres standardindstillinger. Brug SHGetKnownFolderPath(FOLDERID\_RoamingAppData, ...).

Andre referencer 2


Disse værdier er miljøvariabler. Du ser på enten\% appdata\% eller $ HOME/.app (ikke sikker på MAC-metoden, de kan have 'pakker'). Da du bliver nødt til at vide, hvad dit mål er på kompileringstid (sejr vs. andre), kan du vide, hvilken miljøvariabel der skal søges efter. Brug derefter getenv til at hente værdien.

Andre referencer 3


Du kan bruge WINVER til at registrere Windows-versionen