2012-08-07 10 views
10

Qualcuno può aiutarti a seguire? Supponiamo che io ho una QString con un percorso file memorizzati su un certo file, voglio sostituire le / (barre) da esso con \\ (doppi backslash) ho provato:Come sostituire '/' con '\' usando QString replace()?

mystring.replace("/","\\"); 

ma mette solo un singolo \ invece di \\

String prima della sostituzione: D:/myfiles/abc.zip

String dopo la sostituzione: D:\myfiles\abc.zip

Expec ted stringa: D:\\myfiles\\abc.zip

+0

Non realmente sicuro, ma per quanto mi ricordo qfile/QFileInfo felicemente lavorare con qualsiasi separatore di directory – friendzis

+0

Sono sorpreso questo in realtà compila. Non stai sfuggendo alla chiusura '" 'con il terzo' \\ '? E che lingua usi? C++? – CodesInChaos

+0

Ma adb ha bisogno di '\\': p Sto facendo uno strumento adb automatico :) –

risposta

23

È necessario utilizzare:

mystring.replace("/","\\\\"); 

Il compilatore utilizza \ come carattere di escape nelle stringhe (per cose come \t, \n o \r) in modo che \\ è in realtà trasformato in \. Se sono necessari due backslash, è necessario iniziare con quattro.

0

1) Perché si desidera sostituirli, le barre in avanti di AFAIR funzionano anche nelle operazioni sui file (indipendentemente dal sistema operativo).
2) Hai provato a leggere i documenti, ad esempio perché lo \\ produce una sola barra rovesciata?

+0

le barre in avanti non funzionano quando si eseguono operazioni adb in un telefono Android, quindi devono essere sostituiti da doppi backslash (anche la singola barra inversa non funziona: p) –

+0

Potresti aver letto la spiegazione pubblicata da paxdiablo sopra nei documenti, descrive chiaramente l'uso del singolo '\\' come carattere di escape. Ogni personaggio di escape sfugge a un personaggio che lo segue. –

18

Se si desidera convertire i percorsi in formato di Windows, si può semplicemente utilizzare QDir::toNativeSeparators():

qDebug() << QDir::toNativeSeparators("c:/windows/path"); // Prints "c:\windows\path" 
Problemi correlati