+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Cercare delle cartelle e dei file

  1. #1
    gl_malinverni non  in linea Scolaretto
    Post
    76
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao a tutti, ho un problema che non riesco a risolvere.

    Ho un file in formato testo contenente una lista di nomi, la lista pu variare, da 1 a 40000.
    I nomi corrispondono a delle cartelle contenenti n file (il numero e il nomi dei file non sono fissi).
    Io dovrei individuare, se presente, la cartella indicata nel file e copiare gli n file presenti nella cartella, in un'altra directory.

    Il mio problema consiste nel fatto che non riesco a trovare il modo corretto per passare il percorso della cartella alla funzione FindFirstFile.



    
    
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    char *campoc (FILE*);
    void cerca_file(char *);
    
    int main(void) {
    
    // **************************** Campi del file **************************************
    	
    	char *CODE;
    	
    // ************************** Variabili di sistema ************************************
    	
    	FILE *fr;	// file in lettura
    	char *fileread = "C:\\Ellipse\\Mattonelle\\Obbligatorie.txt"; 
    
    	fopen_s(&fr, fileread, "r");
    	while (!feof(fr)) {
    		CODE = campoc(fr);
    		
    		cerca_file(CODE);
    	
    				
    	
    		free(CODE);
    		
    		
    		
    	}
    	fclose(fr);
    	return 0;
    
    }
    
    		
    
    void cerca_file(char CODE) {
         WIN32_FIND_DATA FindFileData;
         HANDLE hFind;
         char DirPath[70];
     
         sprintf(DirPath, "C:\\Ellipse\\Mattonelle\\Case\\%s", CODE);
         hFind = FindFirstFile(DirPath, &FindFileData);
         if (hFind == INVALID_HANDLE_VALUE) {
              printf ("FindFirstFile failed (%d)\n", GetLastError());
         
          } else {
              printf ("FindFirstFile ok \n");
          
          }
       
          FindClose(hFind);
    
          return;
    }
    


    Ho capito che l'errore la formattazione del DirPath ma non riesco a capire come risolverlo.


    La funzione campoc(fr) fornisce il nome della cartella andandola a cercare nel file

    Grazie a tutti per l'aiuto

  2. #2
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,505
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    Mostra un esempio del file in questione, ovviamente con pochi dati.

    Non ho capito se devi cercare su TUTTO il disco OGNI cartella ...
    ℹ️ Leggi di pi su AntonioG ...

  3. #3
    gl_malinverni non  in linea Scolaretto
    Post
    76
    Like Inviati  
    0
    Like Ricevuti  
    0
    Prima di tutto grazie per la risposta.

    Questo un estratto del file testo

    
    INF670110861727000001861
    INF660110052986000001052
    INF670110393477000001393
    INF670110700937000002700
    INF690110741569000002741
    INF690110867219000002867
    INF690110403849000002403
    INF660110406226000003406
    INF660110406216000003406
    INF660110406186000003406
    INF660110513636000003513
    INF660110513626000003513
    INF660110066996000003066
    INF660110141126000003141
    INF670110853037000003853
    INF690110342189000004342
    INF690110560189000004560
    INF660110560296000004560
    INF660110149936000005149
    INF660110790966000005790
    INF660110150236000005150
    INF660110588696000005588
    INF680110606028000006606
    INF660AVE0528260ZITAX052
    INF660AVE0529260ZITAF052
    INF660AVE0529460ZITAD052
    INF660AVE0529560ZITAD052
    INF660AVE0529760ZITAC052
    INF660AVE5554660ZITAR555
    

    In pratica ho una cartella chiamata "Case", all'interno di questa cartella ho 54000 sotto cartelle con nomi simili a quelli riportati nell'estratto del file.
    All'interno di queste sotto cartelle ci sono dei file, come dicevo il numero e il nome di questi file non sono fissi.

    Ad esempio: Io devo cercare la cartella "INF670110861727000001861" dichiarata nella prima riga del file, all'interno della directory "Case" e copiare tutti i suoi file in un'altra cartella di nome "C:\Ellipse\Mattonelle\Obbligatorie"

    Per il momento mi sono fermato alla ricerca dei file


    Mi sono accorto ora, che ho inserito il percorso errato.

    Riporto il codice modificato:



    
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    char *campoc (FILE*);
    void cerca_file(char *);
    
    int main(void) {
    
    // **************************** Campi del file ********************************************************
    	
    	char *CODE;
    	
    	// **************************************** Variabili di sistema ************************************
    	
    	FILE *fr;	// file in lettura
    	char *fileread = "C:\\Ellipse\\Mattonelle\\Obbligatorie.txt";
    
    	fopen_s(&fr, fileread, "r");
    	while (!feof(fr)) {	
    		CODE = campoc(fr);
    		
    		cerca_file(CODE);
    	
    		free(CODE);
    		
    	}
    	fclose(fr);
    	return 0;
    
    }
    
    
    void cerca_file(char *CODE) {
          WIN32_FIND_DATA FindFileData;
          HANDLE hFind;
          char DirPath[70];
     
          sprintf(DirPath, "C:\\Ellipse\\Mattonelle\\Case\\%s\\*.*", CODE);
          hFind = FindFirstFile(DirPath, &FindFileData);
          if (hFind == INVALID_HANDLE_VALUE) {
             printf ("FindFirstFile failed (%d)\n", GetLastError());
          } else {
             printf ("FindFirstFile ok \n");
         }
       
         FindClose(hFind);
    
         return;
     }
    


    Grazie

  4. #4
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,505
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    Quindi non devi cercare nulla perch i percorsi li conosci. Una volta creato il percorso

    \Case\INF670110861727000001861

    prendi tutti i file e li copi nell'altra cartella?
    ℹ️ Leggi di pi su AntonioG ...

  5. #5
    gl_malinverni non  in linea Scolaretto
    Post
    76
    Like Inviati  
    0
    Like Ricevuti  
    0
    Il mio problema proprio questo, non gli piace come creo il percorso.
    Ho creato una cartella di prova con il nome riportato nella prima riga e ho inserito un file, ma non mi trova nulla.

    Il programma gira, ma mi da una segnalazione di errore nella funzione FindFirstFile sulla variabile DirPhat:

    char DirPath[70]

    Error: argument of type "char *" is incompatible with parameter of type "LPCWSTR"

    Non capisco come risolverlo

  6. #6
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,505
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    Con cosa stai compilando? Stai usando Unicode?
    ℹ️ Leggi di pi su AntonioG ...

  7. #7
    gl_malinverni non  in linea Scolaretto
    Post
    76
    Like Inviati  
    0
    Like Ricevuti  
    0
    Sto utilizzando Microsoft Visual Studio 2010 Professional

  8. #8
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,505
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    Ok, quindi devi configurare (propriet progetto) non per usare il set Unicode ma Multibyte
    ℹ️ Leggi di pi su AntonioG ...

  9. #9
    gl_malinverni non  in linea Scolaretto
    Post
    76
    Like Inviati  
    0
    Like Ricevuti  
    0
    Stavo scrivendo questo, mentre tu mi hai risposto...


    Se modifico il programma in questo modo funziona benissimo:

    
    void cerca_file(char *CODE) {
       WIN32_FIND_DATA FindFileData;
       HANDLE hFind;
      
       TCHAR szDirPath[] = TEXT("C:\\Ellipse\\Mattonelle\\Case\\INF670110861727000001861\\*.*");
     
      
       hFind = FindFirstFile(szDirPath, &FindFileData);
       if (hFind == INVALID_HANDLE_VALUE) {
          printf ("FindFirstFile failed (%d)\n", GetLastError());
         
       } else {
           printf ("FindFirstFile ok \n");
          
       }
       
       FindClose(hFind);
    
       return;
     }
    
    Solo che io non so a prescindere il nome della cartella da cui copiare i file e quando tento di unire il percorso con il nome ricavato dal file testo, smette di funzionare.


    Posso provare la soluzione da te suggerita, ma non ho capito esattamente cosa devo fare e molto probabilmente non lo so fare.
    Potresti darmi qualche indicazione in pi?

  10. #10
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,505
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    Funziona perch vuoi lavorare in Unicode. In questo caso cambia cos

    void cerca_file(TCHAR *CODE) {
    
    e

    	TCHAR szDirPath[MAX_PATH];
    	
    	swprintf(szDirPath, MAX_PATH, TEXT("C:\\Ellipse\\Mattonelle\\Case\\%s\\*.*"), CODE);
    
    ℹ️ Leggi di pi su AntonioG ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. [outlook] trovare una cartella nell'albero delle cartelle.
    Da serbring nel forum Microsoft Word
    Risposte: 6
    Ultimo Post: 17-08-2019, 10:24
  2. Creare delle cartelle per denominare delle variabili
    Da strategaD nel forum Visual Basic .Net
    Risposte: 11
    Ultimo Post: 18-06-2015, 22:32
  3. [VBA] Cercare file in cartelle e sotto cartelle.
    Da Lu Pier nel forum Microsoft Excel
    Risposte: 5
    Ultimo Post: 09-06-2012, 17:38
  4. [Inno Setup]Inserire dei file dentro a delle cartelle
    Da Luchino95 nel forum Altri linguaggi e strumenti
    Risposte: 6
    Ultimo Post: 12-09-2011, 16:12
  5. Ripristino delle cartelle e file private, in XP HOME
    Da dolcissimo nel forum Microsoft Windows
    Risposte: 5
    Ultimo Post: 03-07-2008, 15:15