Newsgroup: it.comp.lang.c
Titolo: ora e data di un file

Salve a tutti, sto cercando di creare un piccolo programma che mi
stampi l' ora e data di creazione di un file in una cartella,
praticamente ho già creato la funzione con la libreria dirent.h,
(readdir, ecc), ora appunto vorrei fare quello descritto, volevo
sapere se c' è solo la funzione system per fare questo ?
grazie . . .


Mi pare che la funzione che ti serve si chiami stat o fstat
E.

 wrote:

grazie, preferisco stat

 wrote:

ciao, scusa sto cercando di usare stat per estrarre l' ora dell'
ultima modifica di un file in una directory, ma non ci riesco in
nessun modo, non è che potresti farmi un esempio :( ?
avevo fatto una cosa del genere:
stat(drs->d_name, &buf)
ma per stamparli tutti ? non mi riesce . . .
grazie . . .

 
buf è una struttura di tipo 'stat'.  Devi estrarre il valore che ti
interessa dal campo st_mtime.  Il tempo è rappresentato dal nimero di
secondi trascorsi dal 1/1/1970 che è il formato standard dei sistemi
UNIX.  Per la conversione ci sono varie funzioni come asctime(),
ctime(), gmtime(), localtime() e mktime().
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 wrote:

grazie per l' aiuto ma non riesco a stampare l' ora esatta, mi stampa
sempre l' ora standard, ecco il code:
while (stat(drs->d_name, &buf)){
	printf("%s\n", ctime(&(buf.st_mtime)));}
si comunque, buf è la struttura di tipo stat . . .
grazie ciao . . .

 	printf("%s\n", ctime(&(buf.st_mtime)));}
E.

 wrote:

1/1/1970 lo dice pure giovanni nella sua risposta :D

 1/1/1970 lo dice pure giovanni nella sua risposta :D
Significa che alla funzione ctime() viene passato un valore 0.
Dato che quel frammento di codice sembra corretto (a parte che è un 
loop infinito) ci deve essere qualche problema precedente.
Questo semplice esempio funziona!
-----
#include <stdio.h>
#include <sys/stat.h>
#include <time.h>
int main(int argc, char **argv)
{
   char buffer[1024];
   FILE *stream;
   char *str;
   int ch, count = 0;
   struct stat buf;
   stat(argv[1], &buf);
   printf("File modified: %s\n", ctime(&(buf.st_mtime)));
   return 0;
}
-----
$ a.out index.php
File modified: Mon May 12 15:07:06 2008


 wrote:

ti ringrazio per l' esempio ma a me non è ancora chiaro nulla :(
io voglio che stampi l' ora dell ultima modifica di tutti i file in
una direcory:
while ((stat(drs->d_name, &buf)) != 0){
	printf("%s\n", ctime(&(buf.st_mtime)));
}
drs->d_name è la struttura dove contiene tutti i nomi dei file:
struct dirent *drs
mi puoi levare solo un dubbio su una cosa del tuo esempio, le
variabili:  char buffer[1024];
   FILE *stream;
   char *str;
   int ch, count = 0;
perchè le dichiari e non li usi poi nel code ? non mi è chiaro :(


 perchè le dichiari e non li usi poi nel code ? non mi è chiaro :(
Perché ho riusato un vecchio file :-)


 wrote:

no mi riesce mi stampa sempre la solita ora:
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <time.h>
int main(){
DIR *dir;
struct dirent *drs;
struct stat buf;
dir = opendir(".");
while ((drs = readdir(dir)) != NULL){
	printf("%s\n%s\n", drs->d_name, ctime(&(buf.st_mtime)));
}
//closedir
return (0);
}
ecco il code, puoi dargli un occhio :)
graze ciao . . .


Il codice che ho postato funziona :-)  Non sei capace di vedere dove 
differisce?


 wrote:

si grazie funziona :D