View Full Version : [C Win32] programma per cercare determinati files...
vorrei creare un programma, batch, C o C++ se possibile che cerchi nel sistema la presenza di determinati files, e poi restistuisca un valore anche booleano, true o false...
ps. non sapevo se metetrlo qui o in programmazione, nel caso mi scuso...:fagiano:
Programmazione mi sembra più appropriata :fagiano:
variabilepippo
22-10-2007, 13:47
Se vuoi farlo con un file batch devi appoggiarti a programmi tipo grep (http://gnuwin32.sourceforge.net/packages/grep.htm), altrimenti fai riferimento alle funzioni WIN32 (es. FindFirstFile (http://msdn2.microsoft.com/en-us/library/aa364418.aspx), FindNextFile (http://msdn2.microsoft.com/en-us/library/aa364428.aspx), etc).
Ovviamente dovrai scrivere una funzione in grado di "traversare" il cosiddetto directory tree.
puoi spiegarmi nel dettaglio?
variabilepippo
22-10-2007, 14:01
puoi spiegarmi nel dettaglio?
Quale approccio? Quello con l'uso di un programma esterno oppure quello con le funzioni native (FindFirstFile per Windows, opendir/readdir per Linux)?
Nel primo caso devi semplicemente passare i parametri da linea di comando corretti, nel secondo devi scrivere una funzione ricorsiva che passi da una directory all'altra attraversando tutto il sottoalbero e che faccia una scansione dei file contenuti nella directory corrente. Non è difficile, ma se non hai un po' di esperienza non è neanche banale...
tieni conto che la mia esperienza con il batch è con del, deltree, ren...quindi quasi nulla... quindi nel dettaglio il programma mi deve dire se un file c'è o meno...si può?
variabilepippo
22-10-2007, 14:11
tieni conto che la mia esperienza con il batch è con del, deltree, ren...quindi quasi nulla... quindi nel dettaglio il programma mi deve dire se un file c'è o meno...si può?
La richiesta è ambigua.
Il programma deve esaminare una singola cartella o un albero di directory?
Deve restituire TRUE o FALSE per ogni cartella o un unico valore booleano al termine della ricerca?
deve restituire un valore bool per ogni directory e se possibile non dire nulla se è false... e dovrebbe esaminare una directosy alla ricerca appunto del file...
variabilepippo
22-10-2007, 14:28
deve restituire un valore bool per ogni directory e se possibile non dire nulla se è false... e dovrebbe esaminare una directosy alla ricerca appunto del file...
Bene, allora inizia a studiare le funzioni FindFirstFile e FindNextFile, butta giù una bozza di un programma in grado di cercare il file solo nella cartella corrente, poi lavoreremo insieme alla scansione di un albero di directory (è molto facile se si scrive una funzione ricorsiva).
guide in italiano non ce n'è?
variabilepippo
22-10-2007, 18:33
guide in italiano non ce n'è?
Porzioni della MSDN sono tradotte in italiano, ma l'inglese tecnico è la lingua franca dell'informatica, ed in particolar modo della programmazione. Ti conviene imparare l'inglese (io l'ho fatto da autodidatta all'età di 9 anni per comprendere la documentazione dei programmi che usavo) ancora prima del C++ ... :)
si in effetti in inglese non trovo, nulla..vabbè lo tradurrò...in ogni caso grazie..mi ci metto e ti faccio sapere...
scusa ma parla anche di findclose...che vuol dire..non è che potresti spigarmi in parole povere che è quella funzione?
variabilepippo
22-10-2007, 20:38
scusa ma parla anche di findclose
FindFirstFile apre una ricerca, FindNextFile la prosegue e FindClose la chiude.
Scrivo un piccolo esempio didattico:
#include <windows.h>
#include <stdio.h>
int main()
{
WIN32_FIND_DATA ricerca;
HANDLE h;
// Apre la ricerca
h = FindFirstFile("*.*", &ricerca);
if (h != INVALID_HANDLE_VALUE)
{
// Prosegue la ricerca
do
if (GetFileAttributes(ricerca.cFileName) == FILE_ATTRIBUTE_DIRECTORY)
printf ("Cartella: %s\n", ricerca.cFileName);
else
printf ("File: %s\n", ricerca.cFileName);
while (FindNextFile(h, &ricerca));
// Chiude la ricerca
FindClose(h);
}
else
{
printf("Errore %d\n", GetLastError ());
}
}
è traducibile in C++ l'esempio?
variabilepippo
23-10-2007, 13:51
è traducibile in C++ l'esempio?
Cioè? Cosa ci sarebbe da tradurre escludendo la gestione minimale dell'I/O?
Se sei alle prime armi ti suggerisco di concentrare la tua attenzione sullo studio del linguaggio (sintassi di base, STL, funzionalità avanzate ma comunque standard, etc), la programmazione di sistema ti risulterà molto più semplice quando avrai acquisito delle basi più solide. È inutile cercare di far funzionare codice altrui se si hanno delle grandi (e più che giustificate, visto che hai appena iniziato) lacune...
le basi ci sono in C++ ma non in C, come avrai capito sono all'inizio, e tutti i parametri che necessitano printf e scanf mi sembrano più complòicati che utili, in C++ la cosa è più semplice...non trovi?
variabilepippo
23-10-2007, 14:12
le basi ci sono in C++ ma non in C
Ma proprio le basi, basi... :) Ti servono molte più conoscenze di quelle che hai per sviluppare autonomamente applicazioni non banali.
Se il problema è rappresentato esclusivamente dalla gestione dell'I/O (parole grosse, per 2 stampe a video!) hai 2 alternative:
1) Sostituisci <stdio.h> con <cstdio> senza modificare altro
2) Sostituisci <stdio.h> con <iostream> ed usi gli stream al posto delle printf che ti risultano così indigeste
hai centrto in pieno, alcune cose non le capisco...come l'inclusione della libreria windows.h e i comandi per capurci in maiuscolo, inoltre dove studio il C++ non dicono niente a proposito di get e le sue funzioni...
variabilepippo
23-10-2007, 14:38
alcune cose non le capisco...come l'inclusione della libreria windows.h e i comandi per capurci in maiuscolo, inoltre dove studio il C++ non dicono niente
Spero che tu abbia scelto di studiare il C++ su un buon libro e non su tutorial più o meno improvvisati reperibili in rete.
È normale che libri sul C++ di carattere generale non trattino la programmazione di sistema, per quella ci sono testi specifici che andrebbero letti DOPO aver studiato e compreso a fondo TUTTI i costrutti di base (e magari anche qualcuno di quelli "avanzati"). Invertire le due fasi significa perdere tempo: una casa si costruisce dalle fondamenta, non dal tetto! :)
Come avrai notato la documentazione ufficiale è disponibile (quasi sempre) solo in inglese, dunque se non conosci questa lingua andrai poco lontano...
ora vedo un po' di organizzarmi...ti farò sapere, intanto grazie...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.