Newsgroup: it.comp.programmare.win32
Titolo: Borland c++ 5.0 ed accesso alle Directory

Pochi giorni fa Andrea La Forgia ha risposto ad un mio messaggio su come accedere alle direcotry in windows
nella programmazione c/c++.
Egli mi ha consigliato (passandomi il listato) di utilizzare le funzioni findfirst() e findnext() inserendo in findfirst() anche il 
tipo di file da cercare (0 per tutti i files). Dovendo io cercare solo sottodirectory ho sostituito '0' con FA_DIREC
come mi suggeriva il buon manualone di Herb-Schildt, pero' cosi' facendo oltre a leggere le sottodir legge anche i files,
cosa dannosa per i miei scopi. Vorrei quindi un consiglio su come fare, anche perche' ho provato ma con non molti risultati,
 in particolare ho cercato di:
-confrontare il nome letto da findfirst/findnext (salvato in un 'vector<string>') in maniera che trovando il carattere '.' 
 avrei identificato un file, viceversa una directory. Facendo cosi', pero' il compilatore mi schifa dicendo che non puo'
 confrontare un carattere con string[indice] (confronto fatto ad ogni giro del ciclo che riempie ed ingrandisce vector).
Quindi sono un po' disperato e con l'acqua alla gola.
Un grazie a chi mi puo' aiutare e un ciao a tutti                                                              Matteo
_________________________________________________________________________
la tua email gratuita e per sempre su 
http://www.freemail.it
 (anche POP3)
-- 
Posted from 
qma...@hermes.evo.it
 [194.184.29.10] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 directory.
La soluzione piů semplice per ottenere tutte le sottodirectory di una data
directory č probabilmente una cosa tipo questa.
Il programma trova tutti i file della cartella C:\ e ne analizza gli
attributi. Se il file č una directory, allora ne stampa il nome a video.
#include <windows.h>
#include <stdio.h>
#include <conio.h>
/* semplice semplice... */
int main ()
{
 WIN32_FIND_DATA wfd;
 HANDLE hFind;
 CHAR   szFileName[MAX_PATH];
 /* Avviamo una ricerca per tutti i file contenuti in C:\ */
 hFind = FindFirstFile ("C:\\*", &wfd);
 /* Se non sono stati trovati file saltiamo il tutto */
 if (hFind != INVALID_HANDLE_VALUE)
 {
  goto inloop;
  /* Trova il prossimo file, e se non c'č lascia il while */
  while (FindNextFile(hFind, &wfd))
  {
  inloop:
   /* Controlla gli attributi del file verificando che il flag
      FILE_ATTRIBUTE_DIRECTORY sia presente */
   if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    /* Stampa il nome della cartella */
    printf ("Cartella: %s\n", wfd.cFileName);
  }
  /* Chiude lo handle della ricerca */
  FindClose(hFind);
 }
 return 0;
}
Il codice dovrebbe spiegarsi da solo, o almeno spero.
Il goto č contestabile, ok, ma ce l'ho messo per non riscrivere
due volte il codice nel while.
Nota: Gli attributi di un file li puoi anche ottenere con la API
GetFileAttributes().
    Aldo.

 confrontare un carattere con string[indice] (confronto fatto ad ogni giro del ciclo che riempie ed ingrandisce vector).
Per favore, limita la lunghezza della riga a 65-70 caratteri, altrimenti
non e' semplica leggere quel che scrivi.
I nomi delle directory possono benissimo avere una estensione.
...
TSearchRec sr;
if (FindFirst(sPath, iAttributes, sr) == 0)	{
  if (sr.Attr & faDirectory)	{
    // e' una cartella
  }
  while (FindNext(sr) == 0)	{
    if (sr.Attr & faDirectory)	{
      // e' una cartella
    }
  }
  FindClose(sr);
}
Saluti
Paolo Arosio