J'ai un petit problème en C++ que je n'ai pas pu résoudre en naviguant sur internet. Voici mon code (extrait) :
if(File.is_open()) {
while(!File.eof()) {
i++;
getline(File,Line);
if(i>=2) { //Skip Headers
int CharCount=0;
for(int CharPosition=0; CharPosition<Line.size(); CharPosition++) {
if(Line[CharPosition]==',') {
Length=CharPosition;
break;
}
}
NameText=Line.substr(0,Length);
Path= Path_Folder + "\\" + NameText + ".csv";
if(!CheckExistance(Path.c_str())) {
fstream Text_File;
}
Text_File.open(Path, fstream::in | fstream::out | fstream::app);
Text_File<<Line<<"\n";
Text_File.close();
}
}
}
Ce code fonctionne bien, mais j'aimerais modifier le fait qu'il ferme le fichier Text_File
à chaque fois qu'il entre dans la boucle while.
Fondamentalement, ce programme divise un gros fichier d'entrée en un grand nombre de fichiers plus petits. Au fur et à mesure que mes fichiers plus petits deviennent de plus en plus gros, l'exécution devient de plus en plus lente. (normal). Mon but est donc de laisser tous les petits fichiers ( Text_File
) ouvert en dans cette boucle while et de passer le pointeur fstream (pointeur ?) de un à l'autre.
J'ai essayé d'en changer :
...
NameText=Line.substr(0,Length);
Path= Path_Folder + "\\" + NameText + ".csv";
if(!CheckExistance(Path.c_str())) {
fstream Text_File;
}
if(!Text_File.open()) {
Text_File.open(Path, fstream::in |fstream::out | fstream::app);
}
Text_File<<Line<<"\n";
\\Text_File.close();
...
Mais il travaille sur le même Text_File
quoi qu'il arrive NameText
est. Je suppose donc que le pointeur du fstream Text_File
ne change pas. Que dois-je être alors ? Reposer le pointeur ? Comment ?
Merci à tous !
Je ne suis pas sûr que ce soit pertinent, mais je travaille avec Microsoft Visual C++ 2010 Express. De plus, je ne suis pas un programmeur, ni par l'éducation ni par la vie, donc si vous pouvez m'expliquer sans trop de mots avancés, j'apprécierai.