Duplicaté possible: strong>
C ++ puis-je réutiliser Fstream pour ouvrir et écrire plusieurs Fichiers? P>Pourquoi n'est-il pas possible d'utiliser une variable ifstream pour ouvrir un fichier, le lire, puis la fermeture et, après cela, ouvrez un autre fichier, lecture et fermeture, etc.? Comment cela regarderait-il dans le code (disons simplement que chaque fichier a un entier à l'intérieur): p>
xxx pré> La seule façon dont j'ai résolu le problème créait une autre variable ifstream. P> blockQuote>
4 Réponses :
invoquer clair () code> après
ferme () code> sur
ifstream code> objet p>
Vous pouvez utiliser la même variable, vous devez appeler .clear () code> pour effacer les indicateurs de l'objet avant de les réutiliser:
int k,l;
{
std::ifstream input1("File1.txt");
input1 >> k;
}
{
std::ifstream input1("File2.txt");
input1 >> l;
}
De C ++ 0x sur, il n'est pas nécessaire d'appeler ifstream :: Effacer () Parce que la standard spécifie (voir C ++ 0x / 27.9.1.9) Saisie réussie Ifstream :: Open (Open (Open (Open (Open (Clear ().
Le code d'origine de la question fonctionne bien:
#include <fstream> using namespace std; int main() { int k, l; ifstream input1; input1.open("file1.txt"); input1 >> k; input1.close(); input1.open("file2.txt"); input1 >> l; input1.close(); }
Je crois que le problème persiste ici.
@shookees La croyance ne suffit pas, je crois. Ce code compile et le programme fonctionne (il lit même les deux exemples de fichiers). Soyez spécifique, donnez des détails, donnez des erreurs. Votre question est loin d'être idéale, difficilement possible de répondre (donc, j'ai obtenu -1 pour critiquer votre question incomplète, gardez la violation).
Je suis désolé, je n'ai pas --1 que cela semble également que mon compilateur n'ait pas échoué la norme la plus récente à cette époque.
@ shookees c'est bon, désolé d'interpréter mal le Downvote, acclamations
Bien qu'il soit tout à fait possible de faire ce que vous suggérez (bien que vous deviez peut-être effacer les indicateurs d'erreur du flux si l'extraction échouait), ce n'est pas terriblement élégant. En C ++, vous devriez vous sentir libre de faire de nouveaux objets lorsque vous en avez besoin et de les jeter lorsque vous avez terminé. Peut-être qu'un moyen plus systématique d'écrire ce code est dans une boucle locale:
int result; while (true) { std::ifstream infile(get_random_file_name()); if (infile >> n) { break; } // "infile" gets destroyed at the end of the scope } std::cout << "We found a good file, and it contains: " << n << std::endl;
Merci, je pourrais essayer de mettre en œuvre dans le code actuel :)
Qui dit que ce n'est pas possible? Est-ce une question piège?
Avez-vous essayé d'appeler
INPUT1.CLEAR (); code> avant d'ouvrir le fichier suivant?
Ce n'est pas un tour, je suis jolie nouveaub avec C ++ lorsque j'ai utilisé avec mes fichiers, il n'a apparemment pas lu le second. A-t-il fait quelque chose avec des pointeurs?
Désolé, essayé un peu de recherche, mais je n'ai pas trouvé ce fil spécifique
@shookees: Je suppose que ce que j'essayais d'impliquer, c'est que ce n'est pas une bonne approche philosophique des connaissances pour supposer quelque chose d'incertain. Votre question fait de l'hypothèse que c'est impossible, et vous êtes donc défavorisée mentalement parce que vous êtes déjà biaisé contre la solution. Un meilleur moyen de poser des questions sur quelque chose que vous n'êtes pas familier avec est "Où puis-je comprendre comment faire x?"
@Kerreksb +1 pour enseigner Shookes