Traiter plusieurs fichiers dans un dossier

Résolu
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 5 févr. 2011 à 11:18
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 5 févr. 2011 à 21:53
bonjour,
je veux faire les mêmes traitements pour chaque fichier d'un dossier,
je vais donner un exemple pour que vous me comprenez plus:
supposons que j'ai un dossier "44001" comprenant 3 fichiers textes in1, in2 et in3; je veux faire les mêmes traitements pour in1, in2 et in3 et avoir en sortie 3 fichiers différents out1, out2 et out3.
est ce possible, si oui quelles corrections pourrais-je faire pour le code suivant pour satisfaire mes besoins.

#include <string>
#include <dirent.h>
#include <fstream>
#include 

bool isValid(const std::string& path)
{
  return !path.empty() && path != "." && path != "..";
}
int main()
{static const std::string folder = "44001";
std::ofstream ofs ("out.txt");
DIR* rep = opendir(folder.c_str());
if (rep)
  { struct dirent* lecture;

while ((lecture = readdir(rep)))
 {
  if (!isValid(lecture->d_name))
continue;
        
 ofs << "traitement" << std::endl; //ou n&#8217;importe quel traitement ou instruction
 }

closedir(rep);
  }
 return 0;
}

j'espère avoir votre aide le plutôt possible.
merci.

2 réponses

pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
5 févr. 2011 à 19:40
Pour en faire trois il faut déclarer 3 sorties :

std::ofstream ofs1 ("out1.txt");
std::ofstream ofs2 ("out2.txt");
std::ofstream ofs3 ("out3.txt");

puis

ofs1 << "traitement" << std::endl;
ofs2 << "traitement" << std::endl;
ofs3 << "traitement" << std::endl;

dans la boucle.

Après, si c'est pour beaucoup de fichiers, autant faire ceci :

for (int i = 1; i <= nombreFichiers; i++) //tout au début du main
{
 

et là tu remet ton code sauf que pour la déclaration du fichier tu mets :

    char *nbcs = new char;
    itoa (i, nbcs, 10);

    string chemin = "out";
    chemin += nbcs;
    chemin += ".txt";
    std::ofstream ofs (chemin.c_str());


ça va te générer
"out1.txt"
"out2.txt"
"out3.txt"
...
jusqu'à
"out nombreFichiers .txt"

puis
le traitement


et enfin :

} // fin de la boucle juste avant return 0;




Pop70
3
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
5 févr. 2011 à 21:53
je vous remercie pour l'aide, et surtout pour le détail, une réponse bien détaillée qui m'a tellement aidé.
merci.
0
Rejoignez-nous