Bonjour,
Ma question est assez simple, j'aimerais connaître le moyen d'ajouter une ligne en début de fichier par le biais de code c++ (et non par shell avec sed)
Merci d'avance !
Bonjour,
Ma question est assez simple, j'aimerais connaître le moyen d'ajouter une ligne en début de fichier par le biais de code c++ (et non par shell avec sed)
Merci d'avance !
tu prends un fichier, tu stock le contenu dans une chaine, tu concatène avec la chaine que tu veux rajouter et tu écris dans le fichier, je vois pas ce qui te bloques les dedans? :/
Bonjour,
L'insertion en place est impossible.
Un fichier est une suite d'octet, il faut décaler vers le fond chaque octet pour y parvenir.
Si le fichier est petit, lit le dans une string, puis écrit ta chaine, et celle contenant le fichier.
S'il est gros, crée un autre fichier, écrit la ligne, puis copie au bout l'autre fichier.
Dans les deux cas, les fstream et sstream seront tes amis
PS: Puisque tu parles de commandes shell linux, ca peut se faire ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "ma première ligne" | cat - fichier > fichier
Viens de penser à une autre solution .
Ouvrir le fichier en commençant par la fin (avec un mmap ou autre du genre).
Connaitre la taille de la ligne à rajouter.
Décaler tout les octet de la taille de la ligne en remontant chaque octet.
insérer la ligne une fois qu'on a atteint le début.
ensuite je sais pas trop comment faire en code, mais en fouillant un peu, je suis sur que c'est faisable .
tu peux meme le faire en remontant, en lisant par blocs de la taille de la chaine à insérer.
Merci pour vos réponses !
Finalement la solution proposée par leternel me semble être la plus simple d'utilisation !
Seulement, j'ai un bon millier de fichiers txt dans un dossier, et j'aimerais leur rajouter à tous la même ligne, est-ce possible avec la solution echo ?
Merci d'avance !
En fait, ma proposition, quoi que simple d'aspect, ne fonctionne pas, il faut passer par un fichier intermédiaire, ou tricher avec tee.
Le shell étant doté d'une builtin for, il suffit de tester boucler sur la bonne chose.
Je viens de vérifier la commande suivante, mais je t'invite à l'essayer sur des fichiers de tests.
Si tu as l'header dans un fichier, il suffit de remplacer le - par le chemin du fichier, et de retirer le "echo |"
Code : Sélectionner tout - Visualiser dans une fenêtre à part for f in *.txt; do echo "ma premire ligne" | cat - $f |tee $f >/dev/null; done;
Je ne comprends pas ce que je viens d'obtenir, ça a effectué le traitement comme il se devait pour le premier fichier, parfait. Par contre, le deuxième fichier ne contient plus que la ligne insérée, le troisième s'est vu supprimer 5 colonnes et contient la ligne au début, le 6e juste la ligne etc.
Au moins la ligne y est bien sur tous les fichiers, reste à faire en sorte que ça garde le reste ...
Moi, ca marchait bien.
C'est quoi, ta ligne à ajouter exactement?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager