Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C] - Ricerca di un file in C:\

    Ho bisogno di creare una funzione che data una stringa, ad esempio nomefile.ext, opp nomedir
    mi stampi a video tutti i percorsi in cui è presente...

    Cioè se ho C:\nomefile.ext; C:\nomedir\nomefile.ext;

    e scelgo di cercare nomefile.ext, il programma mi deve stampare a video C:\, C:\nomedir

    Spero che qualcuno mi saprà consigliare qualche magica API di windows per sviluppare questa funzione!

    Accetto anche suggerimenti sull'implementazione...

    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Lo puoi fare con una funzione ricorsiva che attraversi tutto un ramo del filesystem (o tutto il disco). Mi sembra che esistano diversi thread in cui si e' parlato di questi algoritmi ... dovresti fare una ricerca nel forum ...

    Pero', una funzionalita' simile non ha nulla di magico ... si tratta di controllare cartella per cartella e file per file, ed e' un lavoro abbastanza pesante per il sistema ...

  3. #3
    lo immagino... ma è solo un lavoro puramente universitario... quindi niente di professionale, tranquillo!

    Grazie!

  4. #4
    Ho cercato nel forum, ma non ho trovato granchè... Cosa dovrei cercare?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nel forum ci sono molti esempi ma quasi tutti per VB ...

    Studia questo esempio di Microsoft su MSDN

    http://msdn2.microsoft.com/en-us/library/aa365200.aspx

  6. #6
    io da qui ho preso spunto...ma non so bene come modificare visto che con le API non ci so fare molto...
    Tra l'altro devo implementare anche una visita ricorsiva di tutte le dir... e controllare in ogni dir se il nome del file cercato è presente... in poche parole VVoVe:

    Chiedo solo un piccolo aiutino... almeno un inizio, poi cercherò di perfezionare da solo il codice...

    Grazie

  7. #7
    Codice PHP:
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <sys/stat.h>
    #include <sys/param.h>

    void do_a_directory(char pathnameint level)
    {
       
    DIR directory;                /* Like a FILE *, but for directories. */
       
    struct dirent entry;          /* Only used as a pointer - see dirent.h */
       
    char newname;                 /* Name of directory at next level. */
       
    struct stat statbuf;            /* So we can check which files are directories. */
       
    long where;                     /* We will leave this directory and come */
                                       /* back - need to remember where we were. */
       
    int retvali;
       
    /* Print this directory name, properly indented. */
       
    for( 0leveli++)
          
    printf("   ");
       
    printf("%s\n"pathname);

       
    /* Open a directory for directory reads. */
       
    directory opendir(pathname);
       if(
    directory == NULL)
       {
          
    fprintf(stderr"Cannot open %s\n"pathname);
          
    perror("Reason");
          return;
       }
       while( ( 
    entry readdir(directory)) != NULL)
       {
          
    /* Skip if . or .. */
          
    if( strcmp(entry -> d_name".") == ||
                
    strcmp(entry -> d_name"..") == )
             continue;
          
    /* Manufacture pathname of entry relative to where we started. */
          
    newname = (char *) malloc(MAXPATHLEN);
          
    strcpy(newnamepathname);
          
    strcat(newname"/");
          
    strcat(newnameentry -> d_name);
          
    /* stat it to see if it is a directory. */
          
    retval stat(newname, &statbuf);
          if (
    retval == &&  ( statbuf.st_mode S_IFDIR))
          {
             
    /* If it is, close current directory, do the lower one recursively */
             /* and on return reopen the current directory, remembering to */
             /* get back to where we were. */
             
    where telldir(directory);
             
    closedir(directory);
             
    do_a_directory(newnamelevel 1);
             
    directory opendir(pathname);
             if(
    directory == NULL)
             {
                
    fprintf(stderr"Cannot open %s\n"pathname);
                return;
              }
              
    seekdir(directorywhere);
          }
          
    free(newname);
       }
       
    closedir(directory);
    }

    void main(int argcchar argv[])
    {
        
    /* Usage check */
        
    if( argc 2)
        {
            
    fprintf(stderr,"Usage: dtree directory\n");
            exit(
    1);
        }
        
    do_a_directory(argv[1], 0);

    la funzione do_a_directory stampa a video la directory tree a partire da una cartella radice, sia essa C:\ , D:\ , C:\prova\ciao, insomma qualsiasi cartella.
    E' abbastanza banale inserire un modulo dentro la funzione do_a_directory() che cerchi esattamente il nome del file che stai ricercando, e stampi a video la cartella corrispondente solo se ha trovato il file.

    codice preso da http://docs.linux.cz/programming/c/u...les/dtree.html

    e già usato innumerevoli volte all'interno dei miei programmi

  8. #8
    grazie mille!

    ma è per linux... io uso windows...

  9. #9

  10. #10
    Per windows nessuna soluzione?

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.