2010-11-14 2 views
2

Je crée un grand fichier texte, la première ligne est un résumé qui dépend du contenu. J'insère actuellement une ligne de résumé qui contient ce que j'attends du résumé, et après avoir créé le fichier, je le compare avec ce qui a été écrit. Si l'information est différente, j'écris le résumé initial.En C++, comment insérer une ligne au début d'un fichier texte?

Le code suit.

std::ofstream ofile(filename); 
    numOutSegInSynth-=computeSegmentsFromLevel(numLevelsInSynth-1,myInitCkt); 

    //extra padding inserted, to prevent summary overwriting segments 
    ofile<<numNodesInSynth<<" "<<numOutSegInSynth<<" 0"<<std::endl; 
    ofile.close(); 
    for (long i=0; i<(numLevelsInSynth-1); i++) { 
    //at all 
    long numSegOnLevel = computeSegmentsFromLevel(i,myInitCkt); 
    assert(numSegOnLevel); 
    numSegsCreated+=numSegOnLevel; 
    buildSegmentsList(i,numSegOnLevel,filename,myInitCkt); 
    } 
    if (numSegsCreated != numOutSegInSynth) { 
    //update segment count 
    std::ofstream ofile(filename, ios::in | ios::out); 
    ofile.seekp(0, ios::beg); 
    short pred = log10(numOutSegInSynth)+1; 
    short act = log10(numSegsCreated)+1; 
    if (act>pred) { 
     ofile<<numNodesInSynth<<" "<<numSegsCreated<<" 0"<<std::endl; 
    } else { 
     ofile<<numNodesInSynth<<" "<<numSegsCreated<<" 0"<<std::endl; 
    } 
     ofile.close(); 
    } 

Je voudrais savoir s'il est possible de simplement ajouter au début du fichier, soit d'insérer une nouvelle ligne ou un seul caractère Merci

+0

S'il vous plaît utiliser le tiret 4-espace (ou Ctrl + K) pour l'affichage de votre code afin qu'il soit formaté correctement. – Kos

+0

désolé à ce sujet – akintayo

+2

* ajouter au début * - Je ne suis pas sûr que ce soit l'utilisation correcte du mot append. Ajouter signifie * ajouter à la fin *. –

Répondre

3

Comme le dit Ignacio, la plupart des systèmes de fichiers ne supportent pas l'insertion dans les fichiers, sans parler des fichiers texte. Et la notion de bibliothèque standard C++ d'un fichier est un simple flux d'octets. Et donc un résumé de taille fixe au début, comme il semble que vous vouliez avec votre code, est une solution pratique (note: votre code ne semble pas atteindre cette taille fixe).

Toutefois, certains communs systèmes de fichiers prennent en charge l'association d'informations supplémentaires avec des fichiers.

Par exemple, Windows NTFS prend en charge plusieurs flux de données par fichier:

 
C:\test> echo blah blah >data.txt 

C:\test> type data.txt 
blah blah 

C:\test> echo some info >data.txt:summary 

C:\test> type data.txt 
blah blah 

C:\test> more <data.txt:summary 
some info 

C:\test> _ 

Par ex, c'est le mécanisme utilisé par Windows Explorer pour ajouter les informations de synthèse aux fichiers. Par conséquent, si vous programmez un système qui prend en charge plusieurs flux et n'envisagez pas de porter le programme ou les données sur d'autres systèmes, vous pouvez envisager un fichier à flux multiples. Une troisième alternative consiste à l'implémenter efficacement vous-même, en ayant deux fichiers associés ou plus. Par exemple. un fichier de données et un fichier récapitulatif. Avec, par exemple, une convention de nommage les reliant.

Vive & HTH.,

3

La plupart des systèmes de fichiers sont conçus pour avoir seulement des données ajouté à la fin. L'insertion de données au début nécessite la réécriture du fichier.

+0

+1. Je recommande d'utiliser des fichiers séparés pour le résumé et pour le journal incrémentiel. Eh bien, à moins que vous ne puissiez garantir que la longueur de l'en-tête restera la même. – Kos

2

La réponse courte est que vous ne pouvez pas ajouter le résumé au début du fichier une fois que les données ont été écrites dessus. Mais vous pouvez toujours obtenir l'effet désiré. N'écrivez simplement pas toutes les données dans le fichier. Si vous pouvez vous le permettre, gardez-le dans une zone tampon, comme un flux de chaînes. Ensuite, quand vient le temps d'écrire le fichier, d'abord écrire le résumé, puis vider le contenu du tampon dans le fichier. Une autre façon serait de créer un nouveau fichier, d'y écrire le résumé, puis d'ajouter le contenu du fichier original.

Questions connexes