Filtrare i file per una lista

di il
12 risposte

Filtrare i file per una lista

Buona sera, chiedo; come è possibile filtrare dei file per una lista di file;
ad esempio, ho scritto un programma che mi elenca tutti i file contenuti in una directory...
io invece vorrei che mi elencasse solo i file di tipo teso...
qualcuno sa come posso risolvere questo problema? o magari anche un link?

12 Risposte

  • Re: Filtrare i file per una lista

    Ma come ottieni la lista?
  • Re: Filtrare i file per una lista

    oregon ha scritto:


    Ma come ottieni la lista?
    il codice l'ho postato in un'altra discussione...
    lo rimetto:
    #include <stdio.h>
    #include <string.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    typedef enum { false = 0, true }bool;
    
    #define ramo "+--"
    #define trov "+--"
    #define spac "  ¦"
    #define pipe "¦"
    
    int j = 0;
    
    bool caricameno_elemnti_lista(const char *t_str)
    {
      chdir(t_str);
    
      DIR *t_dir = NULL;
      char t_buf[20][256];
      char t_buf1[256];
      char t_buf2[256];
      char t_tmp[256];
      int t_i = 0;
      int t_j = 0;
      int t_al = 0;
    
      struct dirent *t_pent;
      struct stat t_sta;
    
      if(!(t_dir = opendir("."))){
        printf("opendir() failure; terminating!\n");
        exit(1);
      }
    
      if(j == 0){
        strcpy(t_buf1, trov);
      }
      else {
        strcpy(t_buf1, pipe);
        for(t_al = 0; t_al < j; t_al++){
          strcat(t_buf1, spac);
        }
        strcpy(t_buf2, t_buf1);
      }
    
      while(t_pent = readdir(t_dir)){
        //    printf("A -> Aprtura dir name %s\n", t_pent->d_name);
        if(t_pent->d_name[0] != '.'){
          //printf("A -> Aprtura dir name %s\n", t_pent->d_name);
          stat(t_pent->d_name, &t_sta);
    
          if((S_ISDIR(t_sta.st_mode))){
    	if(j != 0) {
    	  strcat(t_buf1, ramo);
    	}
    	printf("%s %s\n", t_buf1, t_pent->d_name);
    	++j;
            caricameno_elemnti_lista(t_pent->d_name);
    	--j;
          }
          else {
    	strcpy(t_buf[t_i], t_pent->d_name);
            //g_print("C -> Non è una dir\n");
            ++t_i;
          }
        }
      }
    
      for(t_j = 0; t_j < t_i; t_j++){
        if(j > 0){
          if(t_j+1 == t_i){
    	strcpy(t_tmp, t_buf2);
    	strcat(t_tmp, ramo);
          }
          else {
    	strcpy(t_tmp, t_buf2);
    	strcat(t_tmp, trov);
          }
          printf("%s %s\n", t_tmp, t_buf[t_j]);
        }
        else {
          if(t_j+1 == t_i){
    	strcpy(t_tmp, ramo);
          }
          else {
    	strcpy(t_tmp, trov);
          }
          printf("%s %s\n", t_tmp, t_buf[t_j]);
        }
      }
      closedir(t_dir);
      chdir("..");
      return false;
    }
    
    int main(int argc, char *argv[])
    {
      if(argv[1] == NULL){
        printf("Eror! no name path\n");
      }
      else {
        caricameno_elemnti_lista(argv[1]);
      }
        return 0;
    }
    
    come ho scritto in un'altra discussione: devo sistemarlo meglio!! ma in questa discussione chiedo il filtraggio dei file...
  • Re: Filtrare i file per una lista

    mino ha scritto:


    il codice l'ho postato in un'altra discussione...
    Non credere che si debbano leggere tutti i thread per trovare il codice a cui fai riferimento.
    lo rimetto:
    Va sempre fatto, in tutti i thread.

    Quando dici "solo i file di testo" esattamente cosa intendi?
  • Re: Filtrare i file per una lista

    oregon ha scritto:


    mino ha scritto:


    il codice l'ho postato in un'altra discussione...
    Va sempre fatto, in tutti i thread.

    Quando dici "solo i file di testo" esattamente cosa intendi?
    intendo, si come i file vengono aperti in una textview, quindi, mi è inutile che mi elenca i files .o oppure il file eseguibile... altrimenti la textview mi da l'errore di stampa... o magari se questo programma devessi usarlo per altre directory...anche qui è inutile elencare dei files binari, che possono essere: jpg, svg, pdf, ecc... mi serve solo la lista dei files testuali e non binari di qualsiasi genere...
  • Re: Filtrare i file per una lista

    La differenza non è semplice... Ti puoi basare sull'estensione del file, selezionando solo i .txt ma esistono anche altri file e te li perderesti. Non esiste un modo esatto per differenziarne il contenuto.
  • Re: Filtrare i file per una lista

    oregon ha scritto:


    La differenza non è semplice... Ti puoi basare sull'estensione del file, selezionando solo i .txt ma esistono anche altri file e te li perderesti. Non esiste un modo esatto per differenziarne il contenuto.
    Solitamente uso la funzione fopen per aprire un file e fgets per la lettura del file... neanche con queste due funzioni posso stabilire se si tratta di un file di testo o binario?
    So che i file possono essere di due tipi, testo e cioè "r", quelli binari "b"...
  • Re: Filtrare i file per una lista

    No, ai file puoi "accedere" in modalità testo in modalità binaria, ma NON sono testo o binari, non è una loro proprietà specifica.

    In realtà tutti i file sono una sequenza di byte.
  • Re: Filtrare i file per una lista

    oregon ha scritto:


    No, ai file puoi "accedere" in modalità testo in modalità binaria, ma NON sono testo o binari, non è una loro proprietà specifica.

    In realtà tutti i file sono una sequenza di byte.
    secondo te, così è buono?
      if(!(f = fopen(namefile, "r"))){
          g_print("Impossibile aprire il file!\n");
      }
      else {
       while(((fgets(f_buff, 1000, f)) != NULL) && len >= 0){
           len = strlen(f_buff);
           if(f_buff[len-1] != '\n'){
              printf("è un binario\n");
              len = -1;
           }
           else {
              /* fai quello che devi fare */
          }
        }
        fclose(f);
      }
    
    cioè, i file di testo solitamente hanno il ritorno a capo \n o \r quelli binari no! quindi, se già alla prima linea non trova il carattere \n o \r, fermo la lettura e non esegue la stampa... spero che sia efficiente questa soluzione...
  • Re: Filtrare i file per una lista

    No ...
  • Re: Filtrare i file per una lista

    oregon ha scritto:


    No ...
    rispondere solo: no! non ha senso... perché, a me funziona! e vorrei capire il tuo no?
  • Re: Filtrare i file per una lista

    A volte il tempo permette di rispondere solo con un no ...

    La questione è che anche un file "binario" (un programma eseguibile ad esempio) può casualmente terminare con quel byte. Quindi non hai la certezza. Tutto qui.
  • Re: Filtrare i file per una lista

    oregon ha scritto:


    A volte il tempo permette di rispondere solo con un no ...

    La questione è che anche un file "binario" (un programma eseguibile ad esempio) può casualmente terminare con quel byte. Quindi non hai la certezza. Tutto qui.
    ah ecco... quindi nulla da fare... peccato... ho anche visto il comportamento di mc, e neanche mc si limita a non aprire files binari...
    vabbe, grazie per la pazienza e per l'aiuto...
Devi accedere o registrarti per scrivere nel forum
12 risposte