J'ai un fichier texte texte.txt qui se lit (à des fins de simplicité) à nouveau pour la simplicité, j'essaie simplement de définir le premier caractère de chaque ligne sur "x" , Donc, mon résultat souhaité serait p> donc j'ouvre le fichier texte.txt et essaye de remplacer chaque ligne avec la sortie souhaitée dans le même fichier texte. Dans la boucle tandis que j'ai défini le premier personnage de chaque ligne sur 'x'. J'ai également défini la variable "ligne" égale à une, car si elle est sur la première ligne, je souhaite revenir à nouveau au début du fichier afin de remplacer au début au lieu de la fin du fichier. La ligne est ensuite incrémentée de sorte qu'il ignorera le rembobinage de la prochaine itération et devrait continuer à écraser les 2e et 3ème lignes. Cela fonctionne parfaitement pour la première ligne. P> Quelqu'un a des solutions? BTW, j'ai étudié cela largement sur Stackoverflow et d'autres sites, et pas de chance. Voici mon code et ma sortie est également ci-dessous: p> sortie: p>
5 Réponses :
long pos = ftell(fp);//Save the current position while (fgets(buffer, 500, fp) != NULL) { buffer[0] = 'x'; fseek(fp, pos, SEEK_SET);//move to beginning of line fprintf(fp, "%s", buffer); fflush(fp); pos = ftell(fp);//Save the current position }
@NattachaisuteerApongPan Voir 7.21.5.3 La fonction fopen P7 B> de N1570.PDF
Je vous connais que votre commentaire a été répondu il y a 2 ans mais je viens de lire votre réponse et je ne suis pas vraiment clair sur "fflush ()". Votre code fonctionne absolument bien, mais j'ai ensuite essayé de supprimer "fflush (fp)" et exécutez le code. Le programme coincé dans une boucle infinie. Depuis que j'ai brisé le programme, il produisit un résultat très étrange. Je n'ai vraiment aucune idée de la raison pour laquelle on ressemble. Pourriez-vous s'il vous plaît aidez-moi à vous expliquer pourquoi retirer FLUSH produit un résultat comme celui-ci. Voici le lien du fichier texte (programme avant et après exécution). drive.google.com/drive/folders/...
@Nattachaisauererapongpan Il est nécessaire d'appeler fflush code> comme écrit dans le lien indiqué dans le commentaire précédent. Il ne fonctionne pas toujours correctement s'il n'existe pas. Expliqué brièvement, il est tamponné, il doit donc être reflété dans le fichier actuel.
@ Bluepixy merci beaucoup pour votre réponse :) J'ai beaucoup d'idées de votre lien mentionné ci-dessus.
Je suggère toujours d'utiliser un autre fichier faire ces solutions KindDA. p>
Essayez ceci out
#include<stdio.h> #include<stdio.h> #include<string.h> int main() { char buffer[500],read[50][50]; FILE *fp=fopen("text.txt","r+"); int line =1; while(fgets(buffer,500,fp)!=NULL){ buffer[0]='x'; printf("\n%d ",line); puts(buffer); strcat(read[line-1],(const char*)buffer); line++; } fclose(fp); FILE *fp1=fopen("text.txt","w"); rewind(fp1); fprintf(fp1,"%s",read); return 0; }
// file_overwrite.cpp : main project file. // File opens and write y value to a file // again reads same file and re-writes y value to a file #include "stdafx.h" using namespace System; #include<stdio.h> #include<stdio.h> #include<string.h> #include <conio.h> #include<stdlib.h> int main(int argc, char *argv[]) { int x = 19530; FILE *fp1 = fopen("D:\\Data\\BUFF.txt","w+"); if(fp1 == NULL) printf("File not opening \n"); int y=x; fprintf(fp1, "%d \n", y); fclose(fp1); printf("\n file -> open -> write y value and close"); freopen("D:\\Data\\BUFF.txt", "w", fp1); rewind(fp1); y=100; fprintf(fp1, "%d \n", y); printf("\n file -> Reopen -> rewind write y values and close"); fclose(fp1); getch(); return 0; }
Bien que cela puisse sembler évident, quels sont certains fragments de code, veuillez envisager d'utiliser des commentaires de code ou des références de documentation, lors de la réponse à une question, les gens reçoivent donc des informations générales supplémentaires.
// overwrite_file.cpp // File opens and write y value to a file // again reads same file and re-writes y value to a file #include "stdafx.h" using namespace System; #include<stdio.h> #include<stdio.h> #include<string.h> //Include appropriate headers #include <conio.h> #include<stdlib.h> int main(int argc, char *argv[]) { int x = 19530; // Give any value in the limit FILE *fp1 = fopen("D:\\Data\\BUFF.txt","w+"); // open file to write if(fp1 == NULL) // if the file pointer encounters a null, it may not open neither overwrite printf("File not opening \n"); int y=x; fprintf(fp1, "%d \n", y); //print y fclose(fp1); printf("\n file -> open -> write y value and close"); // close the file after writing the value of y freopen("D:\\Data\\BUFF.txt", "w", fp1); //reopen and rewind file rewind(fp1); y=100; // this value of y given within the limits gets printed on the .exe console fprintf(fp1, "%d \n", y); printf("\n file -> Reopen -> rewind write y values and close"); // rewind write values and close fclose(fp1); getch(); return 0; }
Vous ne pouvez pas écraser le fichier pendant que vous le lisez. Eh bien, vous pouvez, mais vous avez des données brouillées. Quel est votre système d'exploitation? Si c'est Linux / Unix, supprimez simplement le fichier après l'ouvrir -
Unlink ("text.txt"); code> - ouvrir un fichier nouveau b> avec le même nom et écrire les lignes modifiées dans le nouveau fichier. Vous aurez deux b>
fichier * code> variables.
Il doit être positionné au début de la ligne.
La réécriture des fichiers en place est délicate. Un fait un peu connu est que lorsque vous avez lu à l'endroit précis où vous souhaitez commencer à écrire, vous devez appeler quelque chose comme
fseek (FP, 0, recherche_cur) code> < / I> Vous commencez à écrire. Et puis encore une fois que vous avez terminé d'écrire, avant de commencer à lire à nouveau.
Vérifiez toujours (! = NULL) La valeur renvoyée de MALLOC () pour assurer le succès de l'opération. Toujours vérifier (! = null) la valeur renvoyée de fopen () pour assurer l'opération a réussi.