Y a-t-il un moyen simple d'appendre quelque chose au début d'un fichier texte à l'aide de flux de fichiers? Parce que la seule façon dont je peux penser, est de charger un fichier dans un tampon, d'écrire du texte à ajouter, puis d'écrire le tampon. Je veux savoir s'il est possible de le faire sans ma mémoire tampon. P>
4 Réponses :
Non, ce n'est pas possible. Vous devriez réécrire le fichier pour insérer du texte au début. P>
Edit: Vous pouvez éviter de lire le fichier entier en mémoire si vous avez utilisé un fichier temporaire, c'est-à-dire: p>
Il n'y a pas de moyen simple, car l'opération réelle n'est pas simple. Lorsque le fichier est stocké sur le disque, aucun octet disponible vide avant le début du fichier, vous ne pouvez donc pas simplement mettre des données là-bas. Il n'y a pas une solution générique idéale à cela - généralement, cela signifie copier tout le reste des données pour le déplacer pour faire de la place. P>
Ainsi, c vous permet de décider comment vous voulez résoudre ce problème. P>
+1 pour "Il n'y a pas d'octets non disponibles avant le début du fichier".
Il n'y a aucun moyen d'ajouter des données au début d'un fichier. P>
Le questionneur dit également que la seule façon dont ils pensaient à résoudre le problème consistait à lire tout le dossier en mémoire et à en écrire à nouveau. Voici d'autres méthodes. P>
Écrivez un espace réservé de zéros d'une longueur connue. Vous pouvez rembobiner le gestionnaire de fichiers et écrire sur ces données, tant que vous ne dépassez pas la taille de l'espace réservé. P>
Un exemple simpliste écrit la taille d'un INT non signé au début qui représente le nombre de lignes qui suivront, mais ne pourrez pas remplir avant d'atteindre la fin et que vous pouvez rembobiner le gestionnaire de fichiers et réécrire le bon fonctionnement. valeur. p>
Remarque: certaines versions de 'C' sur différentes plateformes insistent pour que vous placiez enfin le gestionnaire de fichiers à la fin du fichier avant de fermer le gestionnaire de fichiers pour que cela fonctionne correctement. EM> P> li>
Écrivez les nouvelles données dans un nouveau fichier, puis à l'aide des flux de fichiers appendez les anciennes données dans le nouveau fichier. Supprimez l'ancien fichier, puis renommez le nouveau fichier en tant que nom de fichier ancien. N'utilisez pas de copie, c'est une perte de temps. P> li>
ol>
Toutes les méthodes ont des compromis de la taille du disque par rapport à la mémoire et à l'utilisation de la CPU. Tout dépend de vos besoins d'application. P>
Je voulais juste contrer certaines des revendications plus absolues ici: P>
Il n'y a aucun moyen d'ajouter des données au début d'un fichier. P> blockQuote>
incorrect, il y a donné certaines contraintes. p>
Lorsque le fichier est stocké sur le disque, il n'y a pas d'octets non disponibles avant le début du fichier, vous ne pouvez donc pas simplement mettre des données là-bas. P> blockQuote>
Cela peut être le cas lorsqu'il s'agit du niveau d'abstraction des fichiers sous forme de flux d'octets. Cependant, les systèmes de fichiers stockent le plus souvent des fichiers comme une séquence de blocs, et certains systèmes de fichiers permettent un accès gratuit à ce niveau. P>
Linux 4.1+ (XFS) et 4.2+ (XFS, EXT4) vous permet d'insérer des trous dans des fichiers à l'aide de
challocat code>, étant donné certaines contraintes de décalage / longueur: P>
Typiquement, le décalage et la len doivent être un multiple de la taille du bloc logique du système de fichiers, qui varie en fonction du type et de la configuration du système de fichiers. P> blockQuote>
Exemples sur STACKEXCHANGEGANGEGANGEGANGE Vous pouvez être trouvé par la recherche sur le Web de «Fallocat Repend to File». P>
"Ajout au début" est généralement appelé "Précédent" :)