2013-03-06 18 views
11

sto usando Qt per ottenere un nome di file da parte dell'utente:Rimozione di estensione di un nome di file in Qt

QString fileName = QFileDialog::getOpenFileName(this,tr("Select an image file"),"d:\\",tr("Image files(*.tiff *.tif)")); 

Funziona, ma ho bisogno del nome del file senza la sua estensione, è possibile in Qt ?? whenn cerco:

QString f = QFileInfo(fileName).fileName(); 

f è come "filename.tif", ma voglio che sia "nomefile".

+0

QFileInfo :: baseName() – armanali

risposta

3

È possibile splitfileName con "." come separatore simili:

QString croped_fileName=fileName.split(".",QString::SkipEmptyParts).at(0); 

oppure utilizzare section funzione QString prendere la prima parte prima "" in questo modo:

QString croped_fileName=fileName.section(".",0,0); 
+2

Questo non funzionerà se il nome del file (senza estensione) contiene anche un '.'. – leemes

+7

Perché ripetere ciò che 'QFileInfo' fornisce già? – Angew

+3

Immagino che anche Shf non sapesse che 'QFileInfo' fornisce già questo. Io voto per riaccettare. – leemes

1

È possibile utilizzare QString::split e utilizzare . come il punto in cui dividerlo.

QStringList list1 = str.split(".");

che restituirà un QStringList con {"filename", "extenstion"}. Ora puoi ottenere il tuo nome file senza l'estensione.

+0

Questo non funziona se il nome del file (senza estensione) contiene anche un '.'. – leemes

+1

@leemes sicuro, ma OP non l'ha specificato, vero? –

+2

Beh, "senza estensione" è un po 'ambiguo, specialmente quando si tratta di estensioni combinate come ".tar.gz", ma nel suo esempio, solo la rimozione dell'ultima parte ha più senso. – leemes

6

di far fronte con i nomi dei file che contengono più punti, ricercare l'ultimo e prendere la sottostringa fino a quando quello.

int lastPoint = fileName.lastIndexOf("."); 
QString fileNameNoExt = fileName.left(lastPoint); 

Naturalmente questo può (e dovrebbe) essere scritto come una funzione di supporto per il riutilizzo:

inline QString withoutExtension(const QString & fileName) { 
    return fileName.left(fileName.lastIndexOf(".")); 
} 
+0

Si noti che 'QFileInfo' ha già questa funzione di supporto. – Angew

+0

Sì, non lo sapevo. Il mio suggerimento era più generale: se si scrive codice che è più probabile che possa essere riutilizzato, spostarlo in una funzione. – leemes

68

QFileInfo ha due funzioni per questo:

QString QFileInfo::completeBaseName() const 

Restituisce il nome del file con più breve estensione rimossa (file.tar.gz ->file.tar)

QString QFileInfo::baseName() const 

ritorni del nome di file con l'estensione più lungo rimosso (file.tar.gz ->file)

+8

Questa è la soluzione più elegante per le mani. Comunque fai attenzione con la classe 'QFileInfo'. Si avvolge attorno a un file e ne controlla periodicamente le proprietà. Questo può essere un problema di prestazioni. Quindi dovresti distruggere l'oggetto 'QFileInfo' il prima possibile o chiamare' setCaching (false) '. –

Problemi correlati