6
votes

C Supprimer la première ligne d'un fichier texte sans fichier de réécriture

J'ai un service qui fonctionne tout le temps et conserve également un fichier journal. Il ajoute essentiellement de nouvelles lignes au fichier journal toutes les quelques secondes. J'ai écrit un petit fichier qui lit ces lignes puis les analyser à diverses actions. La question que j'ai est de savoir comment puis-je supprimer les lignes que j'ai déjà analysées dans le fichier journal sans perturber l'écriture du fichier journal par le service?

Habituellement, lorsque j'ai besoin de supprimer une ligne dans un fichier, j'ouvre l'original et un autre, puis je n'écris que toutes les lignes au fichier Temp, à l'exception de l'original que je veux supprimer. Évidemment, cette méthode ne sera pas mot ici.

Alors, comment puis-je continuer à les supprimer?


1 commentaires

5 Réponses :


0
votes

Je ne suis pas sûr, mais je pense de cette façon: La nouvelle ligne est un char, vous devez donc supprimer des caractères pour cette ligne + nouvelle ligne Au fait, "déplacer" tous les caractères de retour (pour écraser l'ancienne ligne), c'est comme copier chaque caractère dans une position différente et les retirer de leur ancienne position

Donc, non, je ne pense pas que vous puissiez simplement supprimer une ligne, vous devez réécrire tout le fichier.


0 commentaires

6
votes

Dans les systèmes de fichiers les plus couramment utilisés, vous ne pouvez pas supprimer une ligne du début d'un fichier sans réécrire le fichier entier. Je suggérerais à la place d'un fichier volumineux, utilisez beaucoup de petits fichiers et faites-les pivoter par exemple une fois par jour. Les anciens fichiers sont supprimés lorsque vous n'en avez plus besoin.


0 commentaires

2
votes

ne peut pas être fait, malheureusement, sans réécrire le fichier, en place ou en tant que fichier séparé.

Une chose que vous mai veux regarder est de maintenir un pointeur dans un autre fichier, spécifiant la position de la première ligne non transformée.

Ensuite, votre processus ouvre simplement le fichier et cherche à cet emplacement, traite certaines lignes, puis met à jour le pointeur.

Vous aurez toujours besoin de rouler sur les fichiers à un moment donné de ne pas continuer à croître pour toujours.


0 commentaires

0
votes

Vous ne pouvez pas, ce n'est tout simplement pas comment les fichiers fonctionnent.

On sonne comme si vous avez besoin d'une sorte de service de journalisation du message que votre programme pourrait se connecter afin de connecter des messages, ce qui pourrait ensuite masquer les détails sous-jacents de fichier ouverture / fermeture de fichier, etc.


0 commentaires

0
votes

Si chaque ligne de journalisation a un identifiant unique (ou même un numéro de ligne), vous pouvez simplement stocker dans votre analyse de journal de l'identifiant jusqu'à laquelle vous avez eu une analyse. De cette façon, vous n'avez rien à changer dans le fichier journal.

Si le fichier journal commence alors à devenir trop gros, vous pouvez passer à un nouveau chaque jour (par exemple).


0 commentaires