Non c'est pas obligatoire en C++, le fichier.close(), tu le fais que si t'as besoin de le fermer à un endroit...
EDIT : :tagcode:
Version imprimable
Je récupère des choses mais ce n'est pas ce qu'il faudrait:
Merci de penser à la balise CODE koala01Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 std::ofstream file1( "C://test.txt"); //int i=12; //file1<<i; CString toto; toto="test"; file1<<toto; file1.close(); std::ifstream fichier( "C://test.txt" ); if ( fichier ) // ce test échoue si le fichier n'est pas ouvert { std::string ligne; // variable contenant chaque ligne lue // cette boucle s'arrête dès qu'une erreur de lecture survient while ( std::getline( fichier, ligne ) ) { // afficher la ligne à l'écran std::cout << ligne << std::endl; } }
quand je mets ce code j'ai un nombre à la place d'un String
Pourquoi?Code:
1
2
3
4 std::ofstream file1( "C://test.txt"); CString i; i="test"; file1<<i;
merci de penser à la balise CODE koala01
Code:
1
2
3
4
5
6
7
8
9
10
11 #include <iostream> #include <fstream> #include <string> int main() { std::ofstream file1( "test.txt"); std::string i = "test"; file1 << i; }
:tagcode:
Ca n'écrit rien danas le fichier!!!!!!!!!
Ce n'est pas possible, tu ne regardes pas le bon fichier ! Cf mes post du dessus, il s'agit du fichier testBonFichier.txt situé dans le même répertoire que ton éxécutable (ou ton dossier de travail sous Visual Studio).
Essaye avec ce code là...
Code:
1
2
3
4
5
6
7
8
9
10 #include <iostream> #include <fstream> #include <string> int main() { std::ofstream file1( "testBonFichier.txt"); // autre nom std::string i = "test"; file1 << i; }
C'est bon, ça marche. Merci!
Maintenant je cherche à mettre 5 variables séparées par ; ou , pour que ce soit compatible avec excel.
Il y a des int et des variables qui sont des chaines de caractères (en gros des string).
Merci de m'aider.
Le code :
devrait marcher...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <iostream> #include <fstream> #include <string> int main() { std::ofstream file1( "testBonFichier.txt"); // autre nom int var1 = 3; int var2 = 4; int var3 = 5; int var4 = 6; file1 << var1 << ";" << var2 << ";" << var3 << ";" << var4; }
Juste un petit conseil. Si tu comme tu l'as dit au dessus, tu souhaites retravailler, alors le mieux serait d'acheter un bon livre sur le C++. C'est là que tu progresseras le mieux...
Bonne continuation. ;)
std::istream est une classe, donc possède un destructeur...
Le fichier est donc automatiquement fermé lorsqu'on sort de la portée du ifstream, c'est-à-dire dans le cas présent à la fin du programme.
Je dis une connerie ? :?
Si, c'est obligatoire, mais fait automatiquement dans le destructeur du stream...
Edit pour Poukill: Je n'avais pas vu que tu m'avais grillé...
Mais, d'un autre coté, avec le code fournis, on peut se demader si l'ouverture en écriture et l'ouverture en lecture sont ou non dans la même portée...
Si, de fait, il essaye d'ouvrir le fichier en écriture, d'y mettre quelque chose et, tout de suite après d'ouvrir le fichier en lecture (dans la même portée et sans avoir fermé le fichier), les problèmes apparaîtront sans doute lors de la tentative d'ouverture en lecture ;):roll:
perso je prefere fermer mon fichier. c'est plus claire a relire
En général, on ne lit et n'écrit pas dans une même fonction... Le close est donc inutile. (j'ai bien dit en général ;) )
(Dans le cas multithread, on met un mutex, donc c'est encore différent)
@ toutounesan=>
La première chose à faire, c'est de vérifier où doivent être placés les fichiers que tu veux utiliser.
*Logiquement* si tu crées un fichier au départ de l'application (sans fournir d'autres info que le nom du fichier), tu devrais pouvoir le retrouver dans l'arborescence de ton projet.
Sinon, il faut veiller à fournir le chemin absolu, ou relatif à l'application qui permettra de retrouver ce fichier.
Si tu veux prendre toutes les précautions, tu peux vérifier l'ouverture d'un fichier, aussi bien en écriture qu'en lecture, car, sous linux, par exemple, la gestion des droits permet d'empêcher la création de nouveaux fichiers dans certains dossiers.
Ensuite, je rejoins pleinement l'avis de poukill lorsqu'il te conseille de reprendre "les bases" depuis le début si ton but est de travailler dans le secteur.
Fais peut être un tour du coté des cours et tutoriels du site, voire, base toi sur les critiques fournies par les membres concernant certains livres afin de choisir celui qui sera le mieux adapté à ton niveau ;)
Travaille à ton aise, sans précipitation, et sans vouloir mettre la charrue avant les boeufs.
Apprend à marcher avant de vouloir courir, et, si tu éprouve un problème particulier face à une situation particulière, n'hésite pas à venir nous demander un complément d'explication ou de l'aide :D
Merci des conseils.
Il est vrai que je me précipite.