2012-11-14 17 views
5

Qual è il modo migliore/più standard per rinominare solo il nome file di base di un determinato percorso file in Qt, preservando la directory e l'estensione?Rinomina nome file di base in Qt

Esiste un modo standard per farlo oppure utilizzo solo le espressioni regolari?

Diciamo che ho:

/home/user/myfile.png 

e sarebbe cambiato in:

/home/user/myfile-modified.png 

risposta

6

Usa QFileInfo per analizzare fuori gli aspetti del percorso.

QFileInfo original("/home/user/myfile.png"); 
QString newPath = original.canonicalPath() + QDir::separator() + original.baseName() + "-modified"; 
if (!original.completeSuffix().isEmpty()) 
    newPath += "." + original.completeSuffix(); 

Attenzione: ' 'Se il nome del file termina con una, ma non ha un'estensione, questo scenderà la'.'. In altre parole, /home/user/myfile. verrà rinominato in /home/user/myfile-modified. Altrimenti, dovrebbe funzionare.

+0

In realtà non voglio spostare il file stesso, voglio solo derivarne un nuovo nome - ad esempio, il mio programma carica l'originale, apporta modifiche e salva un nuovo file basato sul nome del file originale, ma con ' "modificato" aggiunto. Quindi 'QFile :: rename' non è necessario qui. – sashoalm

+0

Hai frainteso. La posizione originale viene mantenuta utilizzando QFileInfo :: canonicalPath() ed è necessaria per il file system per trovare il percorso del file che si sta tentando di modificare. QFile :: rename() non può spostare file comunque. – Phlucious

+0

Aggiungerei una riga di codice per verificare se la ridenominazione ha avuto esito positivo. QFile :: rename fallirà se il nome del file modificato esiste già. – Phlucious

1

non testato, ma questo potrebbe funzionare:

const char* filePath = "/home/user/myfile.png"; 
QFileInfo file(filePath); 
QDir dir = file.dir(); 
QString baseName = file.baseName(); 
QString baseNameModified = ...; // insert here your logic for modifying filename 
QFileInfo fileModified(dir, baseNameModified); 
QString filePathModified = fileModified.filePath();