2013-03-06 12 views
11

ich Qt bin mit einem Dateinamen von dem Benutzer zu erhalten:Entfernen Erweiterung eines Dateinamen in Qt

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

Es funktioniert, aber ich brauche die Dateinamen ohne Erweiterung ist es möglich, in Qt ?? whenn Ich versuche:

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

f wie "filename.tif" ist, aber ich will es "Dateiname" sein.

+0

QFileInfo :: basename() – armanali

Antwort

3

Sie können splitfileName mit "." als Trenn wie folgt aus: „“

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

oder section Funktion QString verwenden, den ersten Teil aufzunehmen, bevor wie folgt:

+2

Dies funktioniert nicht, wenn der Dateiname (ohne Erweiterung) auch ein '.' enthält. – leemes

+7

Warum wiederholen was 'QFileInfo' schon bietet? – Angew

+3

Ich denke, Shf wusste auch nicht, dass 'QFileInfo' dies bereits bietet. Ich stimme für die erneute Annahme. – leemes

1

Sie können QString::split verwenden und die . als den Ort verwenden, an dem sie aufgeteilt werden soll.

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

dass ein QStringList mit {"filename", "extenstion"} zurück. Jetzt können Sie Ihren Dateinamen ohne die Erweiterung erhalten.

+0

Das wird nicht funktionieren, wenn der Dateiname (ohne Erweiterung) auch ein '.' enthält. – leemes

+1

@leemes sicher, aber OP hat das nicht angegeben, oder? –

+2

Nun, "ohne Erweiterung" ist ein wenig mehrdeutig, besonders wenn es um kombinierte Erweiterungen wie ".tar.gz" geht, aber in seinem Beispiel macht nur das Entfernen des letzten Teils mehr Sinn. – leemes

6

Um mit Dateinamen fertig zu werden, die mehrere Punkte enthalten, suchen Sie nach dem letzten und nehmen Sie den Teilstring bis zu diesem Punkt.

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

Natürlich kann diese (und soll) als Hilfsfunktion zur Wiederverwendung geschrieben werden:

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

Beachten Sie, dass 'QFileInfo' bereits diese Hilfsfunktion hat. – Angew

+0

Ja, wusste es nicht. Mein Vorschlag war allgemeiner: Wenn Sie Code schreiben, der höchstwahrscheinlich wiederverwendet wird, verschieben Sie ihn in eine Funktion. – leemes

68

QFileInfo hat zwei Funktionen dafür:

QString QFileInfo::completeBaseName() const 

Returns Dateinamen mit kürzestem Verlängerung entfernt (file.tar.gz ->file.tar)

Name

Returns Datei mit der längsten entfernt Verlängerung (file.tar.gz ->file)

+8

Dies ist die eleganteste Lösung für alle Hände. Sei jedoch vorsichtig mit der Klasse 'QFileInfo'. Es umschließt eine Datei und überprüft ihre Eigenschaften in regelmäßigen Abständen. Dies kann ein Leistungsproblem sein. Also sollten Sie das 'QFileInfo' Objekt so schnell wie möglich zerstören oder' setCaching (false) 'aufrufen. –

Verwandte Themen