Domanda

Sto scrivendo un'applicazione cross-platform che ha bisogno di ispezionare e manipolare Windows-percorsi.

In particolare, per il particolare problema che sto avendo ora, ho bisogno di sapere se un percorso è assoluto o relativo.

Il codice corrente utilizza boost::filesystem::path che ovviamente funziona come un fascino su Windows:

boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }

Il problema di questo approccio è che boost::filesystem::path ha solo due modalità: nativi e portatili. Ciò significa che la grammatica percorso di Windows non è disponibile quando compilo sotto Linux (è #ifdefed nel sorgente). Da qui, il percorso. "C: \ percorso" è considerato in assoluto in Windows, ma relativa a Linux


Si può ragazzi raccomandare un cross-platform libreria C ++ che può controllare e manipolare Windows-percorsi?


Per il momento, l'unica operazione di Windows-path che farò è quello di verificare se un percorso è assoluto o meno.

Il criterio userò per un percorso assoluto è che essa sia contiene una lettera di unità, e il percorso inizia con \. Un esempio di un percorso assoluto sotto questo criterio è C:\path. Questi sono entrambi esempi di percorsi relativi sotto tale criterio:. C:path, \path

È stato utile?

Soluzione 2

Sembra essere difficile trovare una libreria per questo. Una possibilità è PathIsRelative in Winelib, ma non voglio usare Winelib.

ho finito per fare una soluzione molto specifico solo per decidere questa piccola cosa. Supponendo che il percorso sia corretto (una fiera assunto nel mio caso), un percorso assoluto conterrà :\, mentre un percorso relativo non sarà.

Quindi, il male, ma di lavoro, soluzione è: Non c'è biblioteca adatta. Controlla l'esistenza di :\.

Altri suggerimenti

Che dire di QT con QFileInfo ?

Potrebbe illustrare ciò che il programma è destinato a che fare con i percorsi di Windows su Linux?

Forse è sufficiente applicare un po 'di semplice trasformazione alla stringa di percorso di Windows, sintatticamente trasformandolo in un percorso Unix, e quindi utilizzare boost :: filesystem di manipolarla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top