Import initial du projet shipheart_cm5
This commit is contained in:
+143
@@ -0,0 +1,143 @@
|
||||
#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.")
|
||||
}
|
||||
Reference in New Issue
Block a user