Comment faire pour remplacer un fichier dans C?
Je suis en train de remplacer le contenu d'un FICHIER en C. Actuellement, j'ai:
FILE* file = fopen("filename.txt", "r+");
fprintf(file, "%d", 1); //regardless of what's in the file, i want to clear it and put 1 in there
...
//legacy code somewhere else in the code base. can't change.
rewind(file);
fprintf(file, "%d", 2);
fflush(file);
Toutefois, cela ne fonctionnera pas correctement. Le résultat sera:
1, 21
Chaque numéro sera écrit au début de la 1. Par exemple:
1, 21, 31, 41, ...
Je voudrais savoir si il existe un moyen de toujours remplacer ce qui est dans le fichier suivant est obtenu:
1, 2, 3, 4, ...
Toute aide serait appréciée.
Merci.
EDIT:
J'ai changé le code pour:
FILE* file = fopen("filename.txt", "w+");
Le problème persiste encore.
Il suffit de l'ouvrir, "w+"
OriginalL'auteur czchlong | 2012-02-06
Vous devez vous connecter pour publier un commentaire.
Vous décidez que dans
fopen
. Utilisez simplement"w"
ou"w+"
au lieu de"r+"
.Peut-être que je viens de résoudre votre premier problème - comment faire pour effacer l'ancien fichier. Si le code ne un rewind, nous ne pouvons pas vraiment cesser.
donc, si le code n'est pas de faire un rewind alors le problème peut être résolu?
Aussi, si j'ai fscanf après mon premier à écrire "1", serait à l'origine des problèmes?
Oui. 🙂 Lors de la commutation entre la lecture et l'écriture vous à utiliser
fseek
à la position de l'opération suivante (ou, éventuellement, de revenir en arrière pour tout recommencer).OriginalL'auteur Bo Persson
Aussi loin que je peux dire, vous ne pouvez pas remplacer quoi que ce soit avec fprintf. Vous devez utiliser fwrite, par exemple, quelque chose comme
À partir de votre code et de la question je n'ai pas tout suivi ce que c'est vous en fait essayez de faire, mais espérons que cette aide (la moitié d'un an après l'avoir demandé).
OriginalL'auteur Daniel Landau
utiliser la commande suivante avant de
fprintf
:OriginalL'auteur Servalun
J'allais le même problème. Je voulais remplacer le même fichier à partir de ce que je prenais l'entrée. Donc après avoir essayé différentes méthodes, j'ai décidé de créer un autre pointeur qui pointe vers le même fichier. J'ai donc un pointeur qui lit l'entrée, puis je ferme que l'utilisation de la fonction fclose() et j'ai un autre pointeur pour écraser le même fichier et je l'ai de nouveau près que l'utilisation de la fonction fclose(). Ce qui a fonctionné pour moi.
OriginalL'auteur Umesh_Shah