Cercare un file all'interno del computer

di il
10 risposte

Cercare un file all'interno del computer

Salve, sto facendo un lavoro ed ho bisogno di sapere quanto segue:

-Come posso implementare in codice c++ la ricerca di un file (a me interessa più che altro un file .ppt) nel pc?
Ovvero, inserisco in input una lettera/ n lettere/ il nome del file e in output mi appaiono tutti i file che si chiamano così o che contengono quella lettere.

ESATTAMENTE ciò che avviene quando cerco un file utilizzando la barra di ricerca dell'esplora risorse.
Grazie.

10 Risposte

  • Re: Cercare un file all'interno del computer

    Usi le API specifiche di Windows (FindFirstFile, FindNextFile ...) in modo ricorsivo.
  • Re: Cercare un file all'interno del computer

    Ciao scusa non ho ben capito cosa intendi
  • Re: Cercare un file all'interno del computer

    Coccodrillo999 ha scritto:


    Ciao scusa non ho ben capito cosa intendi
    Il post di @Oregon è composto da pochissimi termini, dicci quale non hai capito!
  • Re: Cercare un file all'interno del computer

    Cosa si intende con "ricorsivo"?
    Non ho mai sentito parlare di API, FindFirstFile e FindNextFile, perciò non so cosa siano né come si utilizzino.
    Grazie per l'aiuto.
  • Re: Cercare un file all'interno del computer

    Allora non hai possibilità di scrivere il codice che dici di voler scrivere.

    E' come dire che vuoi costruire un muro e non hai mai sentito parlare di mattoni, malta e cazzuola ...

    P.S. Ti ricordo che hai scritto in un forum tecnico di programmazione, nell'area C/C++ ...
  • Re: Cercare un file all'interno del computer

    Da Wikipedia:
    In informatica, entro un programma, con Application Programming Interface (API) si indica un insieme di procedure (in genere raggruppate per strumenti specifici) atte all'espletamento di un dato compito; spesso tale termine designa le librerie software di un linguaggio di programmazione.
    In pratica sono le funzioni che ti permettono di accedere alle funzioni del sistema operativo.
    Per accedere al filesystem ed eseguire una "dir", devi prima trovare il primo file che ti interessa con FindFirst, e con i dati che questa ti ritorna puoi accedere a tutti i file successivi con FindNext.
    Qui ti metto un vecchio (molto vecchio) metodo che avevo scritto con Visual C++ 6 che eseguiva la scansione di una directory e tutte le sotto directory, giusto come esempio (non ti metto tutta la classe, che probabilmente sui Windows moderni manco funziona più, e sicuramente produrrà un mare di warning, e senz'altro è bacata all'inverosimile, ma quando hai il capo che ti chiede "Hai finito?" ogni 30 minuti, non vai tanto per il sottile).
    #include <windows.h>
    [omissis]
    // Scansione fisica della directory
    
    void Dir::DirScan(const char *percorso)
    {
    	HANDLE DirHandle;
    	WIN32_FIND_DATA sDatiFile;
    	Dir_Items *Elemento;
    	string CurDir = percorso;
    	string CurSearch = CurDir + Filtro;
    
    	// Cerco la prima entry della directory
    	DirHandle = FindFirstFile(CurSearch.c_str(), &sDatiFile);
    	if (DirHandle != INVALID_HANDLE_VALUE)
    	{
    		// se l'elemento trovato non sono le directory '.' e '..'
    		if ((strcmp(sDatiFile.cFileName, "."))&&(strcmp(sDatiFile.cFileName, "..")))
    		{
    			// Memorizzo l'elemento trovato
    			Elemento = new Dir_Items(&sDatiFile, CurDir.c_str());
    			++nItems;
    			Link(Elemento);
    			if ((Recursive)&&(Elemento->IsDir()))
    			{
    				string PercNuovo;
    				Elemento->GetPath(&PercNuovo);
    				DirScan(PercNuovo.c_str());	// Chiamata ricorsiva
    			}
    		}
    		while (FindNextFile(DirHandle, &sDatiFile))
    		{
    			if ((strcmp(sDatiFile.cFileName, "."))&&(strcmp(sDatiFile.cFileName, "..")))
    			{
    				// Memorizzo l'elemento trovato
    				Elemento = new Dir_Items(&sDatiFile, CurDir.c_str());
    				++nItems;
    				Link(Elemento);
    				if ((Recursive)&&(Elemento->IsDir()))
    				{
    					string PercNuovo;
    					Elemento->GetPath(&PercNuovo);
    					DirScan(PercNuovo.c_str());	// Chiamata ricorsiva
    				}
    			}
    		}
    		FindClose(DirHandle);
    	}
    }
    La ricorsione è una possibilità fornita dal C e da altri linguaggi, in cui una funzione può richiamare sé stessa. Utile quando devi esplorare delle strutture annidate come appunto le directory. Il rovescio della medaglia è che se non è sotto attento controllo, la ricorsione può o entrare in loop, o esaurire lo stack.
  • Re: Cercare un file all'interno del computer

    Andrea ... a me non sembra che glielo chieda il capo ... sembra piuttosto un esercizio scolastico perché non posso pensare che un programmatore C/C++ non abbia mai sentito parlare di quei termini. Il copia incolla di una soluzione pronta non gli servirà a molto.
  • Re: Cercare un file all'interno del computer

    Grazie mille andrea.
    @oregon sto facendo alternanza scuola lavoro e il mio tutor mi ha chiesto di fare ciò e non avevo mai svolto una cosa simile.
  • Re: Cercare un file all'interno del computer

    oregon ha scritto:


    Andrea ... a me non sembra che glielo chieda il capo ... sembra piuttosto un esercizio scolastico perché non posso pensare che un programmatore C/C++ non abbia mai sentito parlare di quei termini. Il copia incolla di una soluzione pronta non gli servirà a molto.
    Non ho alcun dubbio... Comunque della mia soluzione ci farà poco, è che stavo giusto backuppando un vecchio hdd esterno che sta esalando gli ultimi, e sono finito sopra i vecchi progetti
  • Re: Cercare un file all'interno del computer

    Coccodrillo999 ha scritto:


    Grazie mille andrea.
    @oregon sto facendo alternanza scuola lavoro e il mio tutor mi ha chiesto di fare ciò e non avevo mai svolto una cosa simile.
    Quindi non te lo doveva chiedere.
Devi accedere o registrarti per scrivere nel forum
10 risposte