Newsgroup: it.comp.lang.c
Titolo: restituire elenco di file .txt

Salve a tutti,  devo scrivere una funzione che stampa a video tutti file
.txt che trova nella directory corrente ma non riesco a venirne a capo.
Riesco a stampare tutti i file e tutte le directory ma non riesco a stampare
solo quelli voluti. Grazie in anticipo a chi avesse dei suggerimenti


Dato che nessuno qua possiede la palla di cristallo, magari se ci fai 
vedere il tuo codice e' meglio...
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

>> Grazie in anticipo a chi avesse dei suggerimenti
se riesci a stampare tutti i file significa che una parte del lavoro
l'hai già fatta,
a te serve solo un filtro per gestire le estensioni,
il filtro si implementa con una funzione che restituisce se
l'estensione è quella desiderata
str_file= "miofile.txt"
bool conferma= EstensioneValida( str_file, ".txt");
bool EstensioneValida( char *ptr_file, char *estensione)
{
/*ti porti alla posizione dell'estensione*/
while( *ptr_file++ != '.' && *ptr_file );
/*controlli che l'estensione sia quella desiderata*/
return !strcmp( ptr_file, estensione) ? VERO : FALSO;
}

 vedere il tuo codice e' meglio...
Hai perfettamente ragione e chiedo scusa, ho avuto un problema col 56k e non
ho potuto completare il mess. il codice e' questo
/*
 stampa il contenuto della directory corrente
*/
/* include per routine su directory */
#include <sys/types.h>
#include <dirent.h>
int main()
{
  DIR *dir;
  struct dirent *file;
  if( (dir = opendir(".")) == NULL) {
    perror("directory corrente");
    exit(errno);
  }
  while((file = readdir(dir))!=NULL) {
       WRITE(file->d_name);
     WRITE("\t");
  }
  WRITE("\n");
  IFERROR(closedir(dir), "directory corrente");
  return(0);
}
Quello che devo fare e' stampare solo i file .txt ma non riesco a gestire il
campo d_name come se fosse una stringa.

 ha scritto nel messaggio
news:ce762fcf.04072...@posting.google.com...

Ho provato ad utilizzare il tuo suggerimento in questo modo:
/*
 stampa il contenuto della directory corrente
*/
/* include per routine su directory */
#include <sys/types.h>
#include <dirent.h>
int main()
{
  DIR *dir;
  struct dirent *file;
  if( (dir = opendir(".")) == NULL) {
    perror("directory corrente");
    exit(errno);
  }
  while((file = readdir(dir))!=NULL) {
       while( *(file->d_name)++ != '.' &&  *(file->d_name)) ;
            if ( !strcmp( file->d_name, ".txt") WRITE(file->d_name);
     WRITE("\t");
  }
  WRITE("\n");
  IFERROR(closedir(dir), "directory corrente");
  return(0);
}
ma non viene prodotto nessun output. Grazie comunque del suggerimento,
continuero' a lavorarci.

   }
Uh? Questo codice non compila nemmeno. A parte che alla fine della riga 
del secondo while c'e' un ";" di troppo (che gia' da solo non farebbe 
funzionare il programma), e poi le parentesi dell'if sono sbilanciate :/.
[OT]
anche se non si dovrebbe parlare qui di programmazione UNIX: il campo 
d_name di una struct dirent e' un array - non puoi quindi incrementarlo 
come fai tu un (file->d_name); e bastava semplicemente abilitare i 
warning, come sempre bisognerebbe fare, per accorgersene...
[/OT]
Almeno posta codice che compila, insomma :/
E poi, il codice che hai scritto per cercare i .txt e' decisamente 
brutto, considerando che esiste la funzione (standard) strstr (in 
<string.h>):
if( (s = strstr(file->d_name, ".txt")) != NULL && s[4] == '\0' )
   WRITE(file->d_name);


 campo d_name come se fosse una stringa.
- Dario