PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erkennnung des Betriebssystems



Ghostrider
20-11-2008, 13:51
Hallo,

ich möchte eine C++ Klasse plattformunabhängig gestalten. Ich muss aber auf verschiedene Pfade zugreifen, die in verschiedenen Betriebssystemen unterschiedlich sind. Gibt es eine Möglichkeit, dass das Programm selbst herausfindet, unter welchem OS es gerade läuft?

locus vivendi
20-11-2008, 18:27
Wenn du zumindest weißt, dass es sich um ein Posix-kompatibles System handelt, dann kannst du die Funktion uname verwenden, um einen genaueren Namen zu erfragen.

Was die Pfade angeht, die Qt Bibliothek hat eine Klasse namens QDesktopServices die Namen einiger üblicher Pfade ausgeben kann. Damit wärst du zumindest unter Windows, Mac und GNU/Linux einigermaßen versorgt.

Ansonsten besteht ja immer noch die Möglichkeit, dass der Benutzer dem Programm mitteilt, wie die Pfade heißen. Ich empfehle dir auch, das Herausfinden der Pfade und das Benutzen der Pfade nicht in einer Klasse zu koppeln. Stattdessen sollte es jeweils eine Komponten geben, welche die tatsächliche Arbeit mit den Pfaden macht, und getrennt davon eine oder mehrere Komponenten die die Pfade liefern.

jeebee
23-11-2008, 13:27
Afair gibt es auch in der boost-Bibliothek Funktionen, die sowas zur Verfügung stellen (siehe zb. auch http://www.linux-magazin.de/heft_abo/ausgaben/2005/02/auftrieb_fuer_c?category=0)

anda_skoa
24-11-2008, 06:59
In vielen Fällen reicht es, den Check zu Buildtime zu machen, d.h. wenn zum Beispiel zwischen Linux und Windows unterschieden werden soll.

Dazu gibt es dann meistens #define Keyword, z.B. bei Verwendung von Qt ist unter Windows Q_OS_WIN definiert, usw.

Ciao,
_

panzi
24-11-2008, 15:02
In vielen Fällen reicht es, den Check zu Buildtime zu machen, d.h. wenn zum Beispiel zwischen Linux und Windows unterschieden werden soll.

Dazu gibt es dann meistens #define Keyword, z.B. bei Verwendung von Qt ist unter Windows Q_OS_WIN definiert, usw.

Ciao,
_

Das reicht aber nicht für die Pfade, denn je nach Windows Version gilt nur einer der Folgenden:
C:\Program Files
C:\Programme

C:\Dokumente und Einstellungen\Benutzername
C:\Windows\Profile\Benutzername
C:\Wie auch immer das auf Englisch heißt\Benutzername

etc.

Was man sieht: Die Pfade hängen von der Sprache und Windows Version ab und auf welcher Partition Windows installiert ist. Aber dafür gibts eigentlich Environment Variablen. Weiß net genau wie die heißen, %HOMEDRIVE%\%HOME% oder so ähnlich.

anda_skoa
25-11-2008, 16:02
Das reicht aber nicht für die Pfade, denn je nach Windows Version gilt nur einer der Folgenden:
C:\Program Files
C:\Programme

Dafür gibt es Win API Funktionen, ist also kein Problem.



C:\Dokumente und Einstellungen\Benutzername
C:\Windows\Profile\Benutzername
C:\Wie auch immer das auf Englisch heißt\Benutzername

Nachdem das ebenfalls Lokalisierungsunterschiede sind, nehme ich stark an, dass es dafür ebenfalls Windows API Funktionen gibt, bzw. abfragbare Windowsversionen, etc.

Ciao,
_