Se connecter / S'enregistrer
Votre question

langage C: Renommer fichier avec date et heure

Tags :
  • Windows
  • Programmation
Dernière réponse : dans Programmation
19 Avril 2007 00:13:40

Bonjour

Petite question. Je cherche a renommer un fichier texte en y inserant la date et l'heure de l'operation.
La fonction "rename" fonctionne mais pour des chaines constantes ex:
rename("logfile.txt", "PreviousLog.txt")

en fait je stocke la date te l'heure dans une chaine de caracteres (ex: char ChaineDate[30]), mais impossible de l'inserer dans le nom du fichier
rename("logfile.txt", ChaineDate) >> ne marche pas!

Une idee?

d avance, merci

Autres pages sur : langage renommer fichier date heure

19 Avril 2007 07:10:11

ça dépend de ton environnement de programmation.

En c, sous unix like ou meme sous windows, tu pourrai, meme si ce n'est pas super propre, appeler la fonction system(char *); en utilisant une commande shell.
exemple:
sprintf(buf,"mv logfile.txt %s",ChaineDate);
system(buf);

Sinon, il existe un certain nombre d'API:
sous windows, les classes TFile ou CFile suivant ton IDE, (MS, Borland)

Citation :

rename("logfile.txt", ChaineDate) >> ne marche pas!

C'est à dire? Il y a un message d'erreur, tu as tracé eventuellement si tu faisais bien appel à la fonction ?

j'oubliais,
Ce qui peut ne pas fonctionner, c'est tout simplement le chemin d'accès au fichier! ton logfile.txt n'est pas forcément dans le meme répertoire que ton exécutable, du coup, pas possible d'y accéder sans chemin complet.
19 Avril 2007 16:19:41

Mon environnement de dev est MS visual C++.

De plus non, ce n'est pas une question de chemin, j'ai mis le chemin entier pour etre sur mais en fait j'avais mis dans mon premier post que
ca passait pour
rename("logfile.txt", "PreviousLog.txt" )
mais pas pour
rename("logfile.txt", ChaineDate) >> ds ce cas la fonction ne me renvoit pas 0 et continue, pas de message d'erreur, juste un fail de la fonction en elle meme, logfile.txt s'appelle toujours logfile.txt apres cette execution.

(J'ai essaye de declarer ChaineDate en char et const char et c pareil...)
Contenus similaires
19 Avril 2007 18:00:15

essaye avec system("move nomfic nouvfic");
t'as vérifié les droits en écriture sur ton logfile ?


montre moi la portion de code qui déconne.

si tu as 1 FAIL, avec MS visualstudio tu as GetLastError() comme fonction ..
  1. LPVOID lpMsgBuf;
  2. FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
  3. FORMAT_MESSAGE_FROM_SYSTEM |
  4. FORMAT_MESSAGE_IGNORE_INSERTS,
  5. NULL,
  6. GetLastError(),
  7. 0, // Default language
  8. (LPTSTR) &lpMsgBuf,
  9. 0,
  10. NULL );



je sais pas si qq1 a déjà posté avec son fils de 6 mois sur les genoux, mais c'est coton !!!! le clavier est 1 immense jeu pour lui, quand il voit les doigts de papa voler de partout (il veut faire pareil) !
19 Avril 2007 18:41:25

System a exactement le meme comportement que Rename

Ci dessous, j'ai logfile txt que je veux renommer qd la taille a atteint un certain seuil et ensuite ouvrir un nouveau logfile.txt pour continuer a ecrire dedans. Et ce bout de code tourne, juste que je n'obtiens jamais ma suvegarde, il reecrit sur logfile.txt...


  1. char NewLogName[30];
  2.  
  3. if (fsize(logfile)>2000) // If LogFile.txt reached maximum size
  4. {
  5. now = time(NULL);
  6. tim = *(localtime(&now));
  7. i = strftime(s,30,"\n%b %d, %Y; %H:%M:%S\n",&tim);
  8.  
  9. fprintf(logfile, s );
  10. fprintf(logfile,"************ Closing Logfile *******************");
  11. fclose(logfile);
  12.  
  13.  
  14. strcpy(NewLogName, s );
  15. strcat(NewLogName, ".txt" );
  16.  
  17.  
  18. if (rename("LogFile.txt", NewLogName)!=0)
  19. {
  20. //Error
  21. }
  22. else
  23. {
  24. //Successful
  25. }
  26. fopen("LogFile.txt","w");
  27.  
  28. }
19 Avril 2007 19:50:14

déjà:

ton strftime retourne la chaine s suivante:
Apr 19, 2007; 19:48:52

>strcpy(NewLogName, s );
Ce qui n'est pas 1 nom de fichier valide. d'où le plantage.




Essayes avec ça, ca marchera mieux :) 
  1. char NewLogName[30];
  2. time_t rawtime;
  3. struct tm * timeinfo;
  4.  
  5. time ( &rawtime );
  6. timeinfo = localtime ( &rawtime );
  7. char s[100];
  8.  
  9. strftime(s,30,"%b.%d.%Y.%H.%M",timeinfo);
  10. printf("%s\n",s);
  11. rename("logfile.txt",s);
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS