Accueil > Forum > > > > fstream, >> et <<
fstream, >> et <<
jeudi 20 septembre 2007 à 14:59:50 |
fstream, >> et <<

Roro8883
|
Bonjour à tous ! J'ai un problème dans mon code avec la fonction fstream. Ca fait depuis un moment que je suis dessus et je trouve pas le problème. Si quelqu'un pouvait m'aider .... fstream hfile; hfile.open(file.c_str(), ios::in | ios::out); /* Modification */ // Lecture du fichier jusqu'à la la ligne précédent la ligne recherchée int x = 0; while ((!hfile.eof()) && (x != meter)) { hfile >> line; x++; } // Modification hfile << value << "\n"; /* Fermeture du fichier */ hfile.close(); Voilà mon code, et le problème est que les lignes sont bien lues dans le fichier, mais impossible d'y écrire quelque chose ! Je pense que c'est parce que je mets les >> et << à la suite, mais je vois pas pourquoi ça poserait problème. Qi quelqu'un pouvait m'aider ... parce que ça fait à peu près 2H que je suis dessus ! Merci
|
|
jeudi 20 septembre 2007 à 16:26:31 |
Re : fstream, >> et <<

The_Guardian
|
Bonjour, Je ne suis pas sure que l'ecriture dans un fichier soit aussi facile et je serais toi, j'ouvrirais le fichier A en lecture et je creerais un fichier B en ecriture et ensuite toutes les lignes lues de A sont recopiees dans B sauf la ligne que tu veux changer et apres tu ecris jusqu'a la fin et tu renommes B en A et c'est ok car je vois pas trop comment ca va faire si l'ancienne ligne L1 est remplacee par une nouvelle ligne L2 plus longue mais bon peut-etre que fstream gere tout ca tout seul deja mais ca me parait assez etrange enfin voila ce que je te propose de faire === Une autruche ne se cuit pas aux petits lardons 
|
|
jeudi 20 septembre 2007 à 17:19:45 |
Re : fstream, >> et <<

Roro8883
|
Ben on voit sur plein de site qu'on peut ouvrir un fichier texte en lecture et écriture simultanément avec fstream ... Donc j'ai tenté, mais ça marche pas ! J'sais pas pourquoi...
J'ai presque réussi en utilisant : long place = hfile.tellg(); hfile.seekp (place-1); mais ça ne fonctionne que pour des chaines de mêmes taille (et encore ...).
Donc je pense que je vais faire comme tu dis. J'voulais faire un truc plus simple, mais en fait ça marche pas (j'vois pas à quoi ça sert alors fstream !).
Tant pis, merci quand même !
|
|
jeudi 20 septembre 2007 à 17:59:43 |
fstream, >> et << et modification

Roro8883
|
Le problème c'est que souvent le fichier contient plein de données (pleins de lignes de texte).
Et donc lire et recopié entièrement le fichier prend pas mal de temps ... ce que je voudrais absolument éviter !
Existe-t-il un moyen (facile ou non [enfin pas super dur non plus]) pour modifier une ligne de texte dans un fichier sans avoir besoin de la recopier ?!
|
|
jeudi 20 septembre 2007 à 19:13:44 |
Re : fstream, >> et <<

SAKingdom
|
Comment veux tu te positionner à la ligne voulu si tu ne le lis pas en entier ? On peut éviter de recopier ce qui précède la ligne mais pas se qui suit (si les tailles ne sont pas identique). Voici un exemple vite fait: int main(void) { char *lpBuf; char lpNewLine[] = "Ceci est une ligne de remplacement\r\n"; int iSize; fstream fsFile("d:\\test.txt", ios::in|ios::out|ios::binary); fsFile.seekg(0, ios::end); iSize = fsFile.tellg(); fsFile.seekg(0, ios::beg); lpBuf = new char[iSize+1]; fsFile.read(lpBuf, iSize); lpBuf[fsFile.gcount()] = 0; int iLast = 0, iCur = 0; int iLine = 5; // On remplace la 5 ème ligne do { if(lpBuf[iCur] == '\n' || !lpBuf[iCur]) { if(!--iLine) { fsFile.seekg(iLast, ios::beg); fsFile.write(lpNewLine, sizeof(lpNewLine)-1); if((iCur-iLast)+1 != sizeof(lpNewLine)-1) fsFile.write(&lpBuf[++iCur], (iSize-iCur)); break; } iLast = iCur+1; } } while(lpBuf[iCur++]); delete[] lpBuf; return 0; } C++ (@++)
|
|
jeudi 20 septembre 2007 à 20:51:19 |
Re : fstream, >> et <<

Roro8883
|
Oui, avant d'appeller le code que j'ai mis dans mon premier post, je lis d'abord le fichier (presque en entier) pour enregistrer le numéro de la ligne à modifier (dans la variable 'meter').
Et sinon, le vrai problème c'est que les fichiers sont trop gros. Rien que cette ligne : lpBuf = new char[iSize+1]; J'imagine même pas la quantité de mémoire que ça utiliserait, même si après la mémoire est libérée...
Enfin, si je comprends bien, y'a aucune fonction, classe ou autre chose qui permette de modifier le texte (d'un fichier texte) comme on ferait simplement en l'ouvrant avec un éditeur de texte ?!
|
|
jeudi 20 septembre 2007 à 21:04:19 |
Re : fstream, >> et <<

SAKingdom
|
Un éditeur de texte met tout le fichier en mémoire (ou une partie, dépendant de l'éditeur). Les modifications sont faites en mémoire et réintégrées dans le fichier à la fin. Si ton fichier est vraiment trop gros, il faudra le charger en mémoire par bloques. Sinon, j'aimerais bien savoir qu'elle taille a ce fichier, car un fichier texte n'est, normalement, pas supposé être si gros. C++ (@++)
|
|
jeudi 20 septembre 2007 à 21:15:06 |
Re : fstream, >> et <<

Roro8883
|
C'est pas vraiment un fichier texte ... enfin si mais c'est plus présenté comme une base de données.
C'est un fichier qui contient des séquences d'ADN, et pleins d'autres trucs du genre. Donc ça prend de la place !
Sinon, les logiciels de base de données, ils font comment, ça fonctionne pareil que les éditeur de texte (mise en mémoire par bloc) ?
|
|
jeudi 20 septembre 2007 à 21:36:49 |
Re : fstream, >> et <<

SAKingdom
|
J'ignore comment sont conçu les BDD mais ça m'étonnerais énormément. C++ (@++)
|
|
samedi 22 septembre 2007 à 12:09:33 |
Re : fstream, >> et <<

luhtor
|
Ca prend énormément de place surtout si tu utilises un fichier au format texte. Un fichier binaire te fera économiser énormément de place (4 fois moins de mémoire), et c'est tellement plus rapide en lecture et tellement plus simple à manipuler par programme. Evidemment c'est illisible avec un éditeur de texte.
Avec un format binaire, tu te positionnes à l'emplacement ou tu veux écrire des données. Toutes les données restantes dans le fichier doivent être décalé pour pouvoir y intercaler tes données. L'intérêt c'est que ce décalage peut s'effectuer par bloc (comme on ferait pour un fichier texte), et donc meme si ton fichier est énorme, tu peux simplement décaler par bloc de quelques dizaines de ko.
|
|
Cette discussion est classée dans : fichier, problème, code, hfile, fstream
Répondre à ce message
Sujets en rapport avec ce message
Pb de gestion de fichier avec fstream [ par Bub325 ]
Salut,J'ai deux problème distinct avec fstream, Le premier est que lorsque j'arrive à la fin d'un fichier, je ne peut plus revenir plus haut dans ce d
Problème : Récupération des données d'un Buffer pour mettre dans une EditBox [ par Memerosti ]
BonjourMon problème est le suivant : J'ai ouvert un fichier, lu ses données, et jusque là ça va. Mais ensuite je voudrais récupérer ces données, pour
fstream [ par Mcjo ]
Bonjour, me rémettant depuis peu au c++ j'ai testé un code de lecture dans un fichier mais la fonction bad() ne semble pas fonctionnée correctement.
extraire une chaine d'un fichier avec fstream [ par graall ]
bonjour,j'ai un problème avec ce code :(le problème est explique dans les comentaires)int x = 10; fstream file("fichier.txt, ios_base::in); char *begi
Corrigez mon code? Comment récupérer la taille d'un fichier? [ par supergrey ]
Bonjour j'utilise pour l'instant la fonction suivante pour récupérer la taille d'un fichier: DWORD TailleFichier(char* str_NomFichier){ HANDLE hFi
Problème en C++ [ par Farqual ]
Bonjour, je viens de me lancer dans le cpp mais j'ai un problème au niveau de la compilation d'un fichier source en un .exe j'apprend avec un livre et
Problème de résultats differents lors de l'exécution d'un meme code sur deux machines [ par miacara ]
Bonjour tous le monde, J'ai un problème un peu bizarre, et j'ai besoin de vos recommandations et clarifications, Je possède un codeur programé en C (
Problème de fichier en C [ par kiitos ]
Je cherche à créer un fichier qui s'ouvre lui même sans qu'il puisse dépendre de son propre nom. Est ce que c'est possible ?FILE *fichier;fichier = fo
problème fichier texte (ofstream) taille ? [ par baby3378 ]
Bonjour à tous, voila, j'ai repri il y a quelque temps la base d'une source qui listait tous les fichiers d'un repertoire. Jusque là aucun souci. Cep
Problème écriture fichier [ par pitidragon ]
Bonjour à tous !J'ai besoin d'aide pour finaliser un projet pour la fac. Je dois réaliser un démineur, et j'ai un petit soucis pour finir. Je dois gér
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|