CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c++]Problème manip de fichiers

-pedrolan-
-pedrolan-
Niveau 7
22 janvier 2006 à 21:49:42

Bonsoir.

Je viens de finir de programmer un editeur de page web qui se rapproche du wysiwyg; tout est compilé, mais lorque j´exécute et que je lance le fichier.html, rien ne se passe...
Voici la source:

  1. include <fstream>

using namespace std;

int main()
{
ifstream x("wysiwyg/index.txt");
char txt[100000];
x.getline(txt,100000,´*´);
x.close();
ifstream y("wysiwyg/titre.txt");
char titre[70];
y.getline(titre,70,´*´);
y.close();
ofstream f("pages_generees/index.html");
f << "<html><head><title>" << titre << "</title></head><body><pre>" << txt << "</pre></body></html>";
f.close();
return 0;
}

Le fonctionnement est très simple, le programme récupère ce qu´il y a d´écrit dans les fichiers.txt et crée à l´aide de la balise <pre> un fichier html...

Ca marchait tout à l´heure, mais là, plus rien...

Quelqu´un peut m´aider?

godrik
godrik
Niveau 30
22 janvier 2006 à 22:33:11

char txt[100000];
x.getline(txt,100000,´*´);
argleuh, je meurs! :)
quel est donc cette laiditude que je vois la! :)

bon, sinon, ca veut dire quoi "plus rien"

-pedrolan-
-pedrolan-
Niveau 7
25 janvier 2006 à 13:44:06

C´est-à-dire que la page html est bien là, mais elle ne contient rien...

-pedrolan-
-pedrolan-
Niveau 7
01 février 2006 à 14:09:39

Et euh en fait qu´est-ce que je peux mettre à la place de cette ´laiditude´? :)

Je n´ai toujours résolu aucun problème...

godrik
godrik
Niveau 30
01 février 2006 à 14:20:40

tout d´abors le char txt[100000];
ca t´amuse d´allouer 100 000 octets sur la pile! :)
Que se passe t´il si ton fichier fait plus de 100 000 octets ?
alors tu en oublie. prefere un truc du genre:
f<<"<html> ...";
char buffer[BUFSIZE];
while (! x.eof())
{
int nbcarread = x.read(buffer, BUFSIZE);
f.write (buffer, nbcarread);
}

avec ca (a peut etre une erreur d´appel pres) ca te permet de ne pas lire tout le fichier d´un coup mais de le lire et le recopier par morceau. tu geres ainsi des fichiers de n´importe quel longueur et tu ne fais pas une enorme allocation sur la pile... (et tu peux arreter de mettre des ´*´ pour finir ton fichier...

-pedrolan-
-pedrolan-
Niveau 7
01 février 2006 à 17:22:01

Merci.

Ca a l´air utile, mais... je ne connais pas certains trucs...
Par exemple BUFSIZE, x.read, et ! x.eof()

-pedrolan-
-pedrolan-
Niveau 7
05 février 2006 à 21:19:36

Bon après avoir un tout petit peu réfléchi, je ne suis pas sûr d´une chose, c´est ´x.eof()´.
eof signifie End Of File, non?

A quoi ca sert exactement?

godrik
godrik
Niveau 30
06 février 2006 à 00:27:10

BUFSIZE tu le fixe toi. par exemple:
const int BUFSIZE = 1024;

les fichiers en C++ dispose d´un pointeur internet
quand tu fais x.read(buffer, BUFSIZE), ca lit au plus BUFSIZE du fichier (heu du flux) que ca ecrit dans buffer, le nombre exacte d´octet lu est renvoyeé par la fonciton read

pour savoir s´il reste des choses a lire, tu peux appeler x.eof() qui renvoie true si tu en est a la fin du fichier et false sinon.

-pedrolan-
-pedrolan-
Niveau 7
08 février 2006 à 13:06:03

D´accord, merci :)

-pedrolan-
-pedrolan-
Niveau 7
08 février 2006 à 14:32:11

Il y a une erreur de compilation dans mon programme, à la ligne:
int nbcarread = x.read(buffer, BUFSIZE);
Le compilo me dit:
invalid conversion from ´void´ to ´int´

Voici le code entier:

  1. include <fstream>

using namespace std;

int main()
{
ifstream x("wysiwyg/index.txt");
///////////////////////////////////////////////
ifstream y("wysiwyg/titre.txt");
char titre[70];
y.getline(titre,70,´*´);
y.close();
///////////////////////////////////////////////
ofstream f("pages_generees/index.html");
f << "<html><head><title>" << titre << "</title></head><body><pre>";
const int BUFSIZE = 1024;
char buffer[BUFSIZE];
while (! x.eof())
{
int nbcarread = x.read(buffer, BUFSIZE);
f.write (buffer, nbcarread);
}
f << "</pre></body></html>";
f.close();
///////////////////////////////////////////////
x.close();
///////////////////////////////////////////////
return 0;
}

dnob700
dnob700
Niveau 10
08 février 2006 à 16:05:50

Je doute que read renvoie le nombre de caractères lus. J´aurais plutot dis que ça renvoyait une référence sur x. Mais ça ne renvoie peut-être rien du tout.

godrik
godrik
Niveau 30
08 février 2006 à 20:01:01

Return Value
The stream (*this).

Remarks
The unformatted input function extracts up to count elements and stores them in the array beginning at _Str. Extraction stops early on end of file, in which case the function calls setstate(failbit). In any case, it returns *this.

tel est l´information donné par msdn

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment