Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    libreria c;formato data c

    Ciao a tutti,sono nuovo del forum.Dove posso trovare la libreria sys/param.h?
    Usando la chiamata di sistema struct stat stbuf e invocando le variabili st_atime,st_ctime e st_mtime della variabile stbuf compaiono dei numeri giganteschi,mentre si dovrebbero visualizzare le date(di creazione,ultimo accesso e ultima modifica)del file in formato leggibile (da persona umana).Inoltre,la variabile stbuf.st_size segna sempre 0,e dovrebbe indicare invece il numero di caratteri.In teoria,la dichiarazione struct stat stbuf dovrebbe funzionare(poichè esegue altri controlli sul file in modo corretto).Qualcuno sa indicarmi perché e come tradurle? Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: libreria c;formato data c

    Originariamente inviato da BLACKGORDON
    invocando le variabili st_atime,st_ctime e st_mtime della variabile stbuf compaiono dei numeri giganteschi
    Certo, e dovresti sapere che il valore è di tipo 'time_t' e rappresenta il numero di secondi trascorsi dalle 00:00:00 del 01/01/1970 UTC.

    Originariamente inviato da BLACKGORDON
    mentre si dovrebbero visualizzare le date(di creazione,ultimo accesso e ultima modifica)del file in formato leggibile (da persona umana).
    Dovresti anche qui sapere che esistono una serie di funzioni standard che fanno capo al file di header <time.h>
    Nel tuo caso particolare basta usare la funzione localtime() per ottenere una struttura 'struct tm' che contiene i vari campi separati di anno, mese, ecc....
    E se non vuoi usarli direttamente puoi usare la funzione strftime() per formattare comodamente una data/ora come più ti piace.

    Originariamente inviato da BLACKGORDON
    Inoltre,la variabile stbuf.st_size segna sempre 0,e dovrebbe indicare invece il numero di caratteri.
    Sì, dovrebbe contenere la lunghezza del file. Ma senza vedere cosa hai scritto di preciso nel codice è difficile dire perché vale sempre 0.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Grazie mille.Il codice è:


    void diret(char *nome){
    struct stat stbuf;
    struct tm *timeinfo,*timeinfo1,*timeinfo2;
    DIR *dirlst=NULL;
    dirent *z=NULL;
    int conta;
    char **m;

    if(stat(nome,&stbuf) == -1){
    cout << "\nNon riesco ad accedere alla directory\n";
    exit(1);
    }

    if((stbuf.st_mode & S_IFMT) == S_IFDIR){

    if((dirlst = opendir(nome)) == NULL){
    cout << "\nNon riesco ad aprire la directory\n";
    exit(1);
    }

    cout << "\nla directory " << nome << " contiene:" << endl;
    conta=0;
    while((z=readdir(dirlst)) != NULL){

    if(strcmp(z->d_name,".")==0 || strcmp(z->d_name,"..")==0){
    continue;
    }
    m=new char*[16];
    m[conta]=new char[16];
    m[conta]=z->d_name;
    ++conta;
    cout << conta << ") file=" << z->d_name << endl;

    }
    if(conta == 0) cout << "Non ci sono file nella directory\n";
    else{
    cout << "Numero di file contenuti nella directory=" << conta;
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    time(&stbuf.st_ctime);
    timeinfo = localtime(&stbuf.st_ctime);
    cout << "\ndata di creazione=" << asctime(timeinfo);
    time(&stbuf.st_atime);
    timeinfo1 = localtime(&stbuf.st_atime);
    cout << "data di ultimo accesso=" << asctime(timeinfo1);
    time(&stbuf.st_mtime);
    timeinfo2 = localtime(&stbuf.st_mtime);
    cout << "data di ultima modifica=" << asctime(timeinfo2) << endl;
    }
    closedir(dirlst);
    ..........fai altre cose,etc..................


    in qualunque posizione stbuf.st_size segna zero.Io lo voglio mettere nella zona contrassegnata con xxxxxxxxxxxxxxxxxxxxxxx;

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da BLACKGORDON
    codice:
         if(stat(nome,&stbuf) == -1){
              cout << "\nNon riesco ad accedere alla directory\n";
              exit(1);
         }
    in qualunque posizione stbuf.st_size segna zero.Io lo voglio mettere nella zona contrassegnata con xxxxxxxxxxxxxxxxxxxxxxx;
    Da quello che leggo nel codice, fai la stat() sul pathname di una directory, non di un file (quindi che ti serve la dimensione??).

    Domanda: su quale S.O. stai lavorando? Perché in Linux anche le directory hanno una loro dimensione (è quella che si vede con il comando ls). Su Windows non ho voglia di provare adesso ma può darsi che per una directory st_size sia appunto sempre 0.

    Ma torniamo alla domanda di prima: che ti serve la dimensione di una directory?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Windows,ma doveva simulare uno UNIX in cui ogni directory è un file.Grazie dell'informazione.La dimensione era un'informazione aggiuntiva,ma niente di indispensabile!

    Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.