|
auteur : François Jaffré |
Pour cela il faut utiliser les méthodes suivantes de QFile :
Première methode |
QFile file (" C:/existe.txt " );
bool valid = file. remove ();
|
Deuxième méthode |
bool valid = QFile: : remove (" C:/existe.txt " );
|
|
lien : QFile::remove
lien : static QFile::remove
|
|
auteur : François Jaffré |
Pour cela il faut utiliser les méthodes suivantes de QFile :
- bool QFile::exists() const -> Permet de verifier si le fichier pointer par l'objet QFile existe.
- static bool QFile::exists(const QString & fileName) -> Permet de vérifier si le fichier "fileName" existe.
Première méthode |
QFile file (" C:/existe.txt " );
bool valid = file. exists ();
|
Deuxième méthode |
bool valid = QFile: : exists (" C:/existe.txt " );
|
|
lien : static QFile::exists
lien : QFile::exists
|
|
auteur : François Jaffré |
Pour cela QFile met à notre disposition les méthodes suivantes :
Remarque : Ces deux méthodes renvoient true si la copie s'est bien passée
et renvoie false dans le cas contraire. Si le fichier spécifié "newName" existe déjà
la copie sera annulée et la méthode renverra false.
Utilisation de la première méthode |
QFile file (" C:/copie.txt " );
bool valid = file. copy (" C:/copieNext.txt " );
|
Utilisation de la deuxième méthode |
bool valid = QFile: : copy (" C:/copie.txt " , " C:/copieNext.txt " );
|
|
lien : QFile::copy
lien : QFile::copy static
|
|
auteur : François Jaffré |
Qt à partir de sa version 4.4 permet avec la classe QDesktopServices de récupérer les différents chemins des répertoires spéciaux tels que Movies, Pictures, Temp, etc. C'est la méthode statique storageLocation() qui prend en argument une énumération de type StandardLocation qui permet d'effectuer cela.
Exemple :On souhaite récupérer le répertoire Pictures de l'utilisateur.
QString PicturesPath = QDesktopServices: : storageLocation (QDesktopServices: : PicturesLocation);
|
La liste de tous les répertoires pouvant être récupérés est ici et correspond à l'énumération StandardLocation.
Remarque : Si vous utilisez l'option QDesktopServices:: DataLocation il est impératif que vous ayez défini préalablement le nom de l'application et le nom de l'organisation à l'aide des méthodes setApplicationName() et setOrganizationDomain() de la classe QCoreApplication.
|
lien : QCoreApplication
lien : QDesktopServices::storageLocation
|
|
auteur : François Jaffré |
Qt permet à l'aide de la classe QFileDialog une utilisation très simple de ces différentes boites de dialogue à l'aide de méthodes static:
- QString getOpenFileName() -> Permet la récupération du chemin d'un fichier existant selectionné par l'utilisateur
- QStringList getOpenFileNames() -> Permet la récupération du chemin de plusieurs fichiers existants selectionnés par l'utilisateur
- QString getSaveFileName () -> Permet la récupération du chemin d'un de fichier non existant dans le but d'être sauvegardé
- QString getExistingDirectory() -> Permet la récupération d'un répertoire sélectionné par l'utilisateur
Remarque : toutes ses méthode fonctionnent sur le même principe :
Exemple |
QString myOpenFile = QFileDialog: : getOpenFileName (this , tr (" Open mp3 file " ), tr (" C:\\ " ), tr (" MP3 files (*.mp3);;All Files (*.*) " ));
if (myOpenFile. isEmpty ())
{
return ;
}
else
{
. . .
}
|
|
lien : QFileDIalog
|
|
auteur : François Jaffré |
Qt fournit depuis sa version 4.3 la classe QDirIterator qui permet la navigation entre répertoires.
Cette classe possède plusieurs surcharges du constructeur permettant de préciser le type de navigation que l'on souhaite entre les répertoires.
La navigation dans les répertoires se fait surtout à l'aide de deux méthodes :
Récupération des fichiers mp3 et avi se trouvant dans un répertoire et ses sous-répertoires. |
QString selectDir = QFileDialog: : getExistingDirectory
(
this ,
tr (" Ouvrir un répertoire " ),
" " ,
QFileDialog: : ShowDirsOnly| QFileDialog: : DontResolveSymlinks
);
QStringList listFilter;
listFilter < < " *.avi " ;
listFilter < < " *.mp3 " ;
QDirIterator dirIterator (selectDir, listFilter , QDir: : Files | QDir: : NoSymLinks, QDirIterator: : Subdirectories);
QStringList fileList;
while (dirIterator. hasNext ())
{
fileList < < dirIterator. next ();
}
|
Note 1 : Si on préfère récupérer une liste de type QFileInfoList au lieu d'une QStringList il suffit d'utiliser la méthode QDirIterator::fileInfo ().
Note 2 : Si on souhaite lister uniquement les fichiers d'un répertoire et non ceux de ses sous-répertoires il est préférable d'utiliser la méthode entryInfoList() de la classe QDir.
|
lien : QDirIterator
lien : QDir::entryInfoList
lien : QFileInfo
|
|
auteur : François Jaffré |
L'écriture dans un fichier texte se fait comme pour la lecture à l'aide de la classe QTextStream.
Celle-ci fourni l'operateur << qui possède énormément de surcharges pour
l'écriture dans un fichier. De plus on peut spécifier le jeux de caractères utilisé
pour l'écriture avec la méthode
QTextStream::setCodec.
Exemple: On souhaite écrire le fichier suivant avec le jeu de caractères UTF-8 :
Bonjour,
Nous sommes le 3 avril 2009
|
QFile file (" Qt.txt " );
if (! file. open (QIODevice: : WriteOnly | QIODevice: : Text))
return ;
QTextStream flux (& file);
flux. setCodec (" UTF-8 " );
flux < < " Bonjour, " < < endl < < " Nous sommes le " < < 3 < < " avril " < < 2009 < < endl;
|
|
lien : QTextStream
lien : Liste des jeux de caractère supportés
|
|
auteur : haraelendil |
La classe QTextStream offre des fonctionnalités intéressantes:
QString fileName = " fichier.txt " ;
QFile fichier (fileName);
fichier. open (QIODevice: : ReadOnly | QIODevice: : Text);
QTextStream flux (& fichier);
|
On peut ensuite lire le fichier de plusieurs façons:
* Intégralement:
QString tout = flux. readAll ();
|
* Ligne par ligne:
QString ligne;
while (! flux. atEnd ())
{
ligne = flux. readLine ();
}
|
* Mot par mot:
QString mot;
while (! stream. atEnd ())
{
stream > > mot;
}
|
La classe QTextStream offre une moyen simple d'écrire ou de lire du texte, d'en extraire ou d'ajouter des lignes, des mots ou des nombres, un QTextStream pouvant fonctionner avec un QIODevice, une QString ou même un QByteArray.
Les opérateurs surchargé << et >> permettent d'opérer sur un QTextStream de façon très simple.
Remarque : Cette classe prend en compte l'encodage du texte.
Mais on peut aussi lire intégralement le contenu d'un fichier sans passer par la classe QTextStream, mais cela nécessite de passer par la classe QByteArray:
QString fileName = " fichier.txt " ;
QFile fichier (fileName);
fichier. open (QIODevice: : ReadOnly);
QByteArray data;
data = fichier. readAll ();
QString ligne (data);
|
De même, on peut lire le fichier ligne par ligne:
QString fileName = " fichier.txt " ;
QFile fichier (fileName);
fichier. open (QIODevice: : ReadOnly);
QByteArray data;
while (! fichier. atEnd ())
{
data = fichier. readLine ();
QString ligne (data);
}
|
|
lien : QFile
lien : QTextStream
|
|
auteur : François Jaffré |
Qt permet facilement d'écrire ou de lire dans un fichier de type binaire. Ceci
se fait à l'aide de la classe QFile pour l'ouverture et la fermeture du fichier
et de la classe QDataStream pour l'écriture ou la lecture de celui-ci. L'intérêt
d'utiliser la classe QDataStream est d'être indépendant de la machine au niveau de l'encodage des
octets. Dans les faits cela veut dire qu'un fichier binaire étant écrit à l'aide de la classe
QDataStream sous Windows par exemple peut être lu sans problème sous toutes les autres plateformes supportant Qt (Mac, Linux...).
Remarque : par défaut, QDataStream travaille en big-endian.
Ecriture d'un fichier binaire |
QVector< qint32> vec;
vec. push_back (1 );
vec. push_back (2 );
vec. push_back (3 );
vec. push_back (4 );
qint32 value = 67 ;
QString str = " Cette chaine sera sauvegardée dans un fichier binaire " ;
QFile file (" MyFile.bin " );
if (! file. open (QIODevice: : WriteOnly))
return ;
QDataStream binStream (& file);
binStream. setVersion (QDataStream: : Qt_4_4);
binStream < < str < < value < < vec;
file. close ();
|
Lecture de ce même fichier binaire |
QVector< qint32> vec;
qint32 value;
QString str;
QFile file (" MyFile.bin " );
if (! file. open (QIODevice: : ReadOnly))
return ;
QDataStream binStream (& file);
binStream. setVersion (QDataStream: : Qt_4_4);
binStream > > str > > value > > vec;
file. close ();
|
|
lien : QFile
lien : QDataStream
|
|
auteur : François Jaffré |
Qt fourni la classe QDir pour manipuler les répertoires. Cette classe permet entre
autre de récupérer le chemin du répertoire courant de l'éxecution et de le modifier :
Récupération du répertoire courant | QString CurrentDir = QDir: : currentPath ();
|
Spécifier le répertoire courant. | QString CurrentDir = " C:/Users/Developpez/Downloads " ;
QDir: : setCurrent (CurrentDir);
|
Remarque :Il est intéressant de préciser que le répertoire courant n'est
pas forcement le même que le répertoire ou se trouve l'exécutable.
|
lien : QDir
|
|
auteur : François Jaffré |
Qt fourni avec la classe QCoreApplication des méthodes static permettant de récupérer facilement des
informations comme le chemin du répertoire de l'exécutable.
On exécute une application depuis C:\Users\developpez\Documents\test.exe
QString MyAppDirPath = QCoreApplication: : applicationDirPath ();
QString MyAppPath = QCoreApplication: : applicationFilePath ();
|
|
lien : QCoreApplication
|
Consultez les autres F.A.Q's


Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur.
Copyright © 2006 Developpez Developpez LLC.
Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne
peut être faite de ce site ni de l'ensemble de son contenu : textes, documents
et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.