144 lines
5.7 KiB
C++
144 lines
5.7 KiB
C++
#include "systeme.h"
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
Systeme::Systeme() : QObject()
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//================================================================================================================================
|
|
// Fonction : Lit le contenu d'un fichier texte et le retourne
|
|
// Reçoit : Le nom du fichier
|
|
// Retour : Une ligne "Ok" ou "Nok" représentant le résultat de la lecture puis la liste des lignes lues dans le fichier.
|
|
//================================================================================================================================
|
|
QStringList Systeme::lecture_fichier(QString fichier)
|
|
{
|
|
QStringList retour;
|
|
|
|
QFile file(fichier); // Appel du constructeur de la classe QFile
|
|
|
|
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) // Si l'ouverture du fichier en lecture à réussie
|
|
{
|
|
//qDebug() << "Ouverture du fichier [" << fichier << "] en lecture effectué avec succès !";
|
|
retour << "Ok";
|
|
|
|
QTextStream entree(&file);
|
|
|
|
while(!entree.atEnd()) // Boucle sur toutes les lignes du fichier (attention, il y en a toujours une de plus à la fin...)
|
|
{
|
|
QString ligne = entree.readLine(); // Lecture de la ligne
|
|
retour << ligne; // Ajout à la structure de retour
|
|
//qDebug() << "Ligne lue dans le fichier : " << ligne;
|
|
}
|
|
|
|
file.close(); // Fermeture du fichier
|
|
}
|
|
else
|
|
{
|
|
qDebug() << "Erreur d'ouverture du fichier [" << fichier << "]. La lecture est abandonnée...";
|
|
retour << "Nok";
|
|
}
|
|
|
|
return(retour);
|
|
}
|
|
|
|
|
|
|
|
//================================================================================================================================
|
|
// Fonction : Lit le contenu d'un fichier texte et le retourne
|
|
// Reçoit : Le nom du fichier
|
|
// Retour : 0 si Ok, -1 si Nok
|
|
//================================================================================================================================
|
|
qint8 Systeme::ecriture_fichier(QString fichier, QStringList lignes)
|
|
{
|
|
QFile file(fichier); // Appel du constructeur de la classe QFile
|
|
|
|
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) // Si l'ouverture du fichier en écriture à réussie
|
|
{
|
|
//qDebug() << "Ouverture du fichier [" << fichier << "] en écriture effectué avec succès !";
|
|
|
|
QTextStream sortie(&file);
|
|
|
|
for ( const auto& ligne : lignes )
|
|
{
|
|
sortie << ligne << "\n";
|
|
//qDebug() << "Ligne écrite dans le fichier : " << ligne;
|
|
}
|
|
|
|
file.close(); // Fermeture du fichier
|
|
return(0);
|
|
}
|
|
else
|
|
{
|
|
qDebug() << "Erreur d'ouverture du fichier [" << fichier << "]. L'écriture est abandonnée...";
|
|
return(-1);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//===================================================================================================
|
|
// Fonction : Exécute la commande shelle reçue, attend la fin d'exécution et renvoi la réponse de
|
|
// la commande.
|
|
// Reçoit : la chaine de la commande
|
|
// Renvoit : La chaine de retour de la commande
|
|
//===================================================================================================
|
|
QString Systeme::commande_shell(QString commande, QString fichier_sortie)
|
|
{
|
|
|
|
//qDebug() << "Commande shell à lancer = [" << commande << "]";
|
|
|
|
QProcess process;
|
|
|
|
// Mise en place du fichier de sortie :
|
|
// ATTENTION : l'utilisation d'une redirection du type ' > fichier_sortie' ne fonctionne PAS avec QProcess...
|
|
if (fichier_sortie != "") process.setStandardOutputFile(fichier_sortie);
|
|
|
|
// Lancement de la commande :
|
|
// process.start(commande);
|
|
// Modif de 08/2026 lors du passage à Qt6 sur CM5 : l'appel direct ne fonctionnait pas avec certaines commandes précédée de sudo.
|
|
// Le version ci-dessous fait le découpage <commande><argument>...<argument> avant d'appeler la fonction de start avec le découpage déjà fait.
|
|
// Résoud le problème mais sans savoir exactement ce qui bloquait dans la commande précédente...
|
|
QStringList args = QProcess::splitCommand(commande);
|
|
QString programme = args.takeFirst();
|
|
process.start(programme, args);
|
|
|
|
// Attente de la fin d'exécution :
|
|
// ATTENTION : on bloque l'éxécution jusqu'à la fin de la commande...!
|
|
process.waitForFinished();
|
|
|
|
//qDebug() << "QProcess error() =" << process.error();
|
|
//qDebug() << "QProcess exitCode() =" << process.exitCode();
|
|
//qDebug() << "QProcess exitStatus() =" << process.exitStatus();
|
|
|
|
// QThread::msleep(5);
|
|
QString out(process.readAllStandardOutput());
|
|
// qDebug()<<"Sortie standard = "<<out;
|
|
QString err(process.readAllStandardError());
|
|
if (!err.isEmpty()) qDebug() << "Erreur commande shell [" << commande << "] : " << err;
|
|
//qDebug() << "Commande shell [" << commande << "] terminée";
|
|
|
|
return(out);
|
|
}
|
|
|
|
//===================================================================================================
|
|
// Fonction : Exécute la commande shelle reçue et retourne à la fonction appelante sans attendre
|
|
// la fin d'exécution.
|
|
// Reçoit : la chaine de la commande
|
|
// Renvoit : Rien
|
|
//===================================================================================================
|
|
void Systeme::commande_shell_non_bloquante(QString commande)
|
|
{
|
|
|
|
//qDebug() << "Commande shell à lancer = [" << commande << "]";
|
|
|
|
QProcess process;
|
|
|
|
// Lancement de la commande :
|
|
process.startDetached(commande); // Permer d'oublier le processus une fois lancé (sinon, on peut générer une erreur du type "QProcess: Destroyed while process ("sudo") is still running.")
|
|
}
|