Bonjour,
J'ai un programme qui doit vérifié que l'espace libre d'un partition ne soit pas inférieure à un seuil donnée dans un fichier ini.
Pour lire ce fichier ini j'utilise un parseur récupéré ici.
Voici le fichier ini :
Citation : fsg.ini
[config]
Drive=C:\\
LowerSpace=100
Et voici mon code :
/*
--------------------------------------------
StasS
--------------------------------------------
main.cpp
--------------------------------------------
*/
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
extern"C"{
#include <c_inifile.h>
#include <c_bool.h>
}
int main(){
/* Declaration des variables */
unsignedlong Secteurs_Par_Cluster, Bytes_Par_Secteurs, Cluster_libre, Total_Cluster; /* stockage des infos */
unsignedlong espace_libre, espace_utilise, espace_total; /* permettra de traiter les infos */
La compilation se passe sans aucun problème mais lors de l'execution, erreure fatale sans plus d'explication que ça et tout marche bien quand je commente la ligne :
Le Problème vient donc du parseur de fichier ini, mais il a l'air d'être sérieux donc c'est moi qui doit faire quelque chose de mal... La récupération de "Drive" fonctionne bien.
Pour info je bosse sous Code::Blocks et je compile avec GNU GCC.
tiens, je ne connaissais pas c_inifile.h
Personnellement, quand je lis un init, je le fais a la main :
- j'ouvre un fichier
- je fais un while sur toutes les lignes
--- si la ligne commence par un espace, un # ou [, alors j'ignore la ligne
--- sinon, je cherche le = dans la ligne, et je prends 2 chaines, celle a gauche du =, celle a droite. Puis je remplis une map ou la clé est la chaine de gauche, la valeur la chaine de droite....
Oui, tu peux aussi chercher directement une ligne qui t'interesse en faisant un find_first_of("ta_chaine"); récupérer la position, l'éraser puis copier la valeur directement dans un entier en faisant un c_str() sur la string puis un atoi (pour l'avoir en int) et le tour est joué.
Merci pour vos réponses, mais je débute lol, si je lis un fichier, ce que je vais lire sera en char, comment les passer en unsigned long ou même en int?
Merci
Bon je m'embettais un peu alors je t'ai fais une petite base de réflexion.
Attention le code que je vais mettre ici ne fonctionne uniquement dans un cas très simple : Il choppe le premier chiffre qu'il voit dans le fichier .ini et basta.
Tout d'abbord le main :
#include <iostream>
#include "reader.h"
int main()
{
Flux worker;
worker.read("file.ini");
worker.give_space();
worker.see_space();
return0;
}
ensuite le reader.h
#ifndef READER_H
#define READER_H
#include <iostream>
#include <fstream>
#include <sstream>
class Flux
{
public:
Flux();
~Flux();
void read(constchar* filename);
void give_space();
void see_space();
private:
std::string flux;
std::stringstream fluxx;
int space;
};
#endif // READER_H
ensuite le reader.cpp
#include <iostream>
#include "reader.h"
Flux::Flux()
{
}
Flux::~Flux()
{
}
void Flux::see_space()
{
std::cout << space << std::endl;
}
void Flux::give_space()
{
size_t pos = 0;
pos = flux.find_first_of("0123456789");
flux.erase(0, pos);
space = atoi(flux.c_str()) ;
}
void Flux::read(constchar* filename)
{
std::ifstreamfile(filename);
fluxx << file.rdbuf();
flux = fluxx.str();
}
Voila, bon courrage et amuse toi bien, essaie d'améliorer ce code pour qu'il fasse ce dont tu souhaites.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html