Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.2.2 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Mieux gérer les noms de fichiers en dérivant QFileInfo

Une toute petite classe FileInfo pour manipuler les noms de fichiers sans s'encombrer avec les "." et les "/".
C'est pour Qt4 : j'ignore si cette classe a évolué en Qt5.

Elle considère le nom complet de fichier ainsi :
/home/gilles/Documents/factures/internet.tar.gz
|______________________________|_______|______|
path() name() extension()
|_____________________________________________|
completeName()
On utilise ainsi FileInfo :
FileInfo fi ("/home/gilles/Documents/factures/internet.tar.gz");
QString p = fi.path (); // p == "/home/gilles/Documents/factures/"
QString n = fi.name (); // n = "internet"
QString e = fi.extension(); // e == ".tar.gz"
fi.setName ("bbox");
fi.setPath ("/home/gilles/tmp");
qDebug() << fi.completeName(); // affiche "/home/gilles/tmp/bbox.tar.gz"
Ça m'a rendu pas mal de services... Voici le code

Header :
#ifndef FILEINFO_H
#define FILEINFO_H

#include <QFileInfo>
#include <QDir>

/**
* @brief The FileInfo class
* simplifier la gestion des noms de fichiers
* sans devoir rajouter de / ou de .
* avec path (), name () et extension ()
*/
class FileInfo : public QFileInfo
{
public:
FileInfo (const QString &fullPath);

QString path () const;
bool setPath (const QString &p);

QString name () const;
bool setName (const QString &n);

QString extension () const;
bool setExtension (const QString &e);

QString completeName () const;

private:
static const QString m_format;
};


#endif // FILEINFO_H
SOURCE cpp
#include "filename.h"

const QString FileInfo::m_format = "%1%2%3";

FileInfo::FileInfo(const QString &fullPath) : QFileInfo(fullPath)
{
}

QString FileInfo::path() const
{
return QString("%1/").arg(absolutePath());
}

bool FileInfo::setPath(const QString &p)
{
QString path = p;
if (!path.endsWith ('/')) path.append ('/');
setFile(m_format.arg(path).arg(name()).arg(extension()));
return exists();
}

QString FileInfo::name() const
{
return baseName();
}

bool FileInfo::setName(const QString &n)
{
setFile(m_format.arg(path()).arg(n).arg(extension()));
return exists();
}

QString FileInfo::extension() const
{
return QString(".%1").arg(completeSuffix());
}

bool FileInfo::setExtension(const QString &e)
{
QString ext = e;
if (!ext.startsWith ('.')) ext.prepend ('.');
setFile(m_format.arg(path()).arg(name()).arg(ext));
return exists();
}

QString FileInfo::completeName() const
{
return m_format.arg(path()).arg(name()).arg(extension());
}

Remarquer que les 3 "set..." renvoient un bool qui informe de l'existence du fichier ou non.
Fonctionne sur toute plate-forme supportée par Qt. Sous Windows, penser à mettre des slashes : "/" dans les noms de fichiers que vous saisissez manuellement.
Connectez-vous ou Inscrivez-vous pour répondre.