2009-06-29 14 views

risposta

7

Se si voleva farlo al momento della compilazione si potrebbe certamente fare qualcosa di simile

#ifdef WIN32 
#define OS_SEP '\\' 
#else 
#define OS_SEP '/' 
#endif 

Oppure si potrebbe usare '/' e le cose funzionano bene su Windows (tranne che per i programmi meno recenti che analizzano il stringa e funziona solo con '\'). Sembra divertente solo se visualizzato all'utente in questo modo.

+0

Non l'ho ancora provato con una macchina windwos ma se funziona questo è abbastanza per me. – Janusz

+0

Per quanto funziona, funzionerà. Tenere presente che i percorsi DOS possono iniziare con una lettera di unità e due punti (in caso contrario, sono relativi all'unità corrente). E fai attenzione alle "forcelle" alternative e ai nomi dei dispositivi. –

+2

Windows è effettivamente ok con la barra diretta. –

7

Come spesso accade, Boost ha una libreria che fa quello che vuoi. Here è un tutorial.

+1

Ho davvero bisogno di una libreria "intera" per la scelta tra/e \? – Janusz

+3

No, ma questa non è l'unica differenza tra i nomi di file DOS e Unix. In effetti, le barre sono accettate dal DOS (e anche dai backslash) - ma non dall'interprete dei comandi cmd.exe. –

+0

Boost è praticamente la libreria standard C++. Non è solo una biblioteca "intera". – rlbond

1

Un modo semplice per fare ciò che è richiesto è avere una piccola funzione (probabilmente inline) che usi la magia del preprocessore per determinare la piattaforma (#ifdef WIN32, ecc.) E restituisce il carattere delimitatore appropriato.

La risposta è un po 'più complicata perché ci sono altre differenze più significative rispetto al carattere delimitatore. I file system di Windows possono avere radici multiple (C: \, D: \, ecc.), Mentre l'intero FS è rootato in/in Unix-land.

Il miglior consiglio potrebbe essere quello di utilizzare boost::filesystem.

2

Utilizzare "/" internamente ovunque. Quindi scrivi una serie di funzioni di utilità che importa un percorso di una delle due forme in "/". Scrivi una funzione 'percorso nativo' che ha le ifdef specifiche del sistema e le conversioni necessarie. che può essere chiamato su richiesta.

Problemi correlati