Tom's Guide > Forum > Programmation > langage C: Renommer fichier avec date et heure

langage C: Renommer fichier avec date et heure

Forum Programmation : langage C: Renommer fichier avec date et heure

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

ç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.


Message édité par elendilm le 19-04-2007 à 08:12:24
Répondre à elendilm

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...)

Répondre à oobillyboyoo

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 ..

Code :
  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) !


Message édité par elendilm le 19-04-2007 à 18:02:04
Répondre à elendilm

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...


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


Message édité par oobillyboyoo le 19-04-2007 à 18:45:41
Répondre à oobillyboyoo

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 :)

Code :
  1. char NewLogName[30];
  2. time_t rawtime;
  3. struct tm * timeinfo;
  4. time ( &rawtime );
  5. timeinfo = localtime ( &rawtime );
  6. char s[100];
  7. strftime(s,30,"%b.%d.%Y.%H.%M",timeinfo);
  8. printf("%s\n",s);
  9. rename("logfile.txt",s);


Message édité par elendilm le 19-04-2007 à 19:52:42
Répondre à elendilm
Tom's Guide > Forum > Programmation > langage C: Renommer fichier avec date et heure
Aller à :

Il y a 2758 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens