La suppression de l'extension d'un nom de fichier dans Qt
J'utilise Qt pour obtenir un nom de fichier de l'utilisateur:
QString fileName = QFileDialog::getOpenFileName(this,tr("Select an image file"),"d:\\",tr("Image files(*.tiff *.tif )"));
Il fonctionne, mais j'ai besoin du nom de fichier sans son extension, est-il possible dans Qt??
whenn j'essaie :
QString f = QFileInfo(fileName).fileName();
f
est comme "nom de fichier.tif", mais je veux qu'il soit "nom de fichier".
QFileInfo::baseName()
OriginalL'auteur Engine | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez
split
fileName
avec le "." comme séparateur comme ceci:ou de l'utilisation
section
fonction de QString pour prendre la première partie avant le "." comme ceci:.
.Pourquoi refaire ce
QFileInfo
fournit déjà?Je suppose que Shf également ne savais pas que
QFileInfo
offre déjà à cette. Je vote pour ré-accepter.QFileInfo::baseName
n'est pas statique, elle doitQFileInfo
objet à utiliser baseName ou completeBaseName. Et pour ce cas, il est inutile, mais en général, oui, ça serait plus élégant.Ce n'est acceptable que dans le contexte de la question (donc pas downvote), mais très mauvais dans un contexte général, comme leemes l'a déjà souligné. L'OP devrait vraiment envisager d'accepter Angew de réponse.
OriginalL'auteur Shf
QFileInfo
a deux fonctions:Retourne le nom du fichier avec la plus courte extension supprimée (
file.tar.gz
->file.tar
)Retourne le nom du fichier avec la plus longue extension supprimée (
file.tar.gz
->file
)QFileInfo
évitez de demander les mêmes informations plusieurs fois, et est rempli uniquement sur demande. Il n'y a pas d'effectuer des contrôles périodiques pour mettre à jour les informations mises en cache, ce qui est pourquoi les fonctions commeQFileInfo::refresh
etsetCaching(false)
existent.J'ai vérifié la documentation et il semble que vous avez raison pour les deux Qt 4 et Qt 5. J'ai écrit mon commentaire il y a quelques temps et ne pas se souvenir de la situation exacte qui m'a incité à écrire. Cependant j'ai eu quelques problèmes de performances. J'espère que mon commentaire n'a pas fait beaucoup de dégâts. Merci de remarquer mon erreur.
OriginalL'auteur Angew
Pour faire face avec des noms de fichiers contenant plusieurs points, cherchez la dernière et prendre la sous-chaîne jusqu'à ce que l'un.
Bien sûr, cela peut (et doit) être écrite comme une fonction d'assistance à la réutilisation:
QFileInfo
a déjà cette fonction d'assistance.Ouais, ne le savait pas. Ma suggestion est plus générale: Si vous écrivez du code qui est le plus susceptible d'être réutilisé, il se met en fonction.
OriginalL'auteur leemes
Vous pouvez utiliser
QString::split
et l'utilisation de la.
comme le lieu où le scinder.QStringList list1 = str.split(".");
Qui sera de retour une
QStringList
avec{"filename", "extenstion"}
. Maintenant, vous pouvez obtenir votre nom de fichier sans l'extension..
.bien sûr, mais l'OP n'a pas de préciser que n'a-t-il?
Ainsi, "sans l'extension" est un peu ambigu, surtout lorsqu'il s'agit combiné des extensions comme ".tar.gz" mais, dans son exemple, seule la suppression de la dernière partie fait plus de sens.
OriginalL'auteur Tony The Lion
Pour obtenir le chemin absolu sans l'extension pour
QFileInfo fileInfo("/a/path/to/foo.tar.gz")
vous pouvez utiliser:pour obtenir
"/a/path/to/foo"
oupour obtenir
"/a/path/to/foo.tar"
OriginalL'auteur jarzec