PDA

View Full Version : [C#] Ricercare un file nel computer


pare93
14-12-2010, 17:16
Salve a tutti,
stò cercando di creare un applicazione in C# preferibilmente che permetta di ricercare un file di nome x nei dischi rigidi nel computer.
Ho cercato su internet e ho trovato anche delle soluzioni abbastanza interessanti ma il fatto è che voglio riuscire a farla io, quindi con delle istruzioni che conosco.
Qualcuno ha da propormi una soluzione?
Grazie in anticipo :)

dojolab
14-12-2010, 19:28
Salve a tutti,
stò cercando di creare un applicazione in C# preferibilmente che permetta di ricercare un file di nome x nei dischi rigidi nel computer.
Ho cercato su internet e ho trovato anche delle soluzioni abbastanza interessanti ma il fatto è che voglio riuscire a farla io, quindi con delle istruzioni che conosco.
Qualcuno ha da propormi una soluzione?
Grazie in anticipo :)

Sicuramente .net avrà dei metodi per aprire le directory e verificare se un file esiste o meno... puoi partire da questa idea di implementazione (anche se le prestazioni sarebbero disastrose); ci vorrebbe un file dell'indice (sul FS) o una Base di Dati dietro (in questo caso il FS stesso).

pare93
15-12-2010, 15:32
Si, all' inizio era proprio quello che avevo pensato io.
Ma dopo mi sono accorto che è una cosa da matti :mbe:
In quanto avevo iniziato creandolo in modo tale da controllare tutti le unità di assegnazione dei dischi rigidi e appena ne trovava una esistente controllava se sulla cartella programmi (x86) c' era la cartella del programma che mi interessa.
Mi spiego meglio:
lui controllava se c' era il disco rigido 'a', se si controlla se all' interno della cartella Pogrammi(x86) c' era la cartella del programma interessato. Invece in caso negativo proseguiva il controllo con la lettera 'b' ... e così via fino alla 'z'.
Naturalmente una volta trovato il programma terminava ritornardo vero.
Ma a me sembra una soluzione alcuanto primitiva :D
Ah se puoi spiegarmi in due parola cosa sono gli FS thanks ;)

!fazz
15-12-2010, 15:38
Si, all' inizio era proprio quello che avevo pensato io.
Ma dopo mi sono accorto che è una cosa da matti :mbe:
In quanto avevo iniziato creandolo in modo tale da controllare tutti le unità di assegnazione dei dischi rigidi e appena ne trovava una esistente controllava se sulla cartella programmi (x86) c' era la cartella del programma che mi interessa.
Mi spiego meglio:
lui controllava se c' era il disco rigido 'a', se si controlla se all' interno della cartella Pogrammi(x86) c' era la cartella del programma interessato. Invece in caso negativo proseguiva il controllo con la lettera 'b' ... e così via fino alla 'z'.
Naturalmente una volta trovato il programma terminava ritornardo vero.
Ma a me sembra una soluzione alcuanto primitiva :D
Ah se puoi spiegarmi in due parola cosa sono gli FS thanks ;)
filesystem

DarkSiDE
15-12-2010, 15:42
Si, all' inizio era proprio quello che avevo pensato io.
Ma dopo mi sono accorto che è una cosa da matti :mbe:
In quanto avevo iniziato creandolo in modo tale da controllare tutti le unità di assegnazione dei dischi rigidi e appena ne trovava una esistente controllava se sulla cartella programmi (x86) c' era la cartella del programma che mi interessa.
Mi spiego meglio:
lui controllava se c' era il disco rigido 'a', se si controlla se all' interno della cartella Pogrammi(x86) c' era la cartella del programma interessato. Invece in caso negativo proseguiva il controllo con la lettera 'b' ... e così via fino alla 'z'.
Naturalmente una volta trovato il programma terminava ritornardo vero.
Ma a me sembra una soluzione alcuanto primitiva :D
Ah se puoi spiegarmi in due parola cosa sono gli FS thanks ;)

fs sta per filesystem :)
Esistono una marea di esempi in rete, da qui puoi prendere spunto:

http://support.microsoft.com/kb/303974
http://www.c-sharpcorner.com/UploadFile/bejoynair/FindFilesinCS12052005042702AM/FindFilesinCS.aspx

pare93
16-12-2010, 05:28
Ok dai vedrò di vedremo gli esempi che mi hai postato ... Grazie mille :)

dojolab
16-12-2010, 06:35
Si, all' inizio era proprio quello che avevo pensato io.
Ma dopo mi sono accorto che è una cosa da matti :mbe:
In quanto avevo iniziato creandolo in modo tale da controllare tutti le unità di assegnazione dei dischi rigidi e appena ne trovava una esistente controllava se sulla cartella programmi (x86) c' era la cartella del programma che mi interessa.
Mi spiego meglio:
lui controllava se c' era il disco rigido 'a', se si controlla se all' interno della cartella Pogrammi(x86) c' era la cartella del programma interessato. Invece in caso negativo proseguiva il controllo con la lettera 'b' ... e così via fino alla 'z'.
Naturalmente una volta trovato il programma terminava ritornardo vero.
Ma a me sembra una soluzione alcuanto primitiva :D
Ah se puoi spiegarmi in due parola cosa sono gli FS thanks ;)

Soluzione alquanto primitiva e anche sbagliata (se proprio vogliamo vederla nel dettaglio).

Tu non devi cercare un programma/file che inizia per A, V o Z. Ma quella lettera deve essere contenuta anche nel file, programma, ad esempio 'vAcanZe.jpeg' (contiene A e Z); dovresti dare la possibilità di cercare anche per lettere, stringhe e sottostringhe.

L'ideale come ti ho detto è crearti un indice di tutto il tuo disco (directory/files) e tenerlo aggiornato ogni qual volta ci sia una modifica sul disco (scrittura). L'ideale sarebbe un file XML (il peso sarebbe di qualche decina di MB, ma le prestazioni nell'aprirlo e leggerlo non penso sarebbero eccelse.

Un FS è l'insieme dei tipi di dati astratti necessari per la memorizzazione, l'organizzazione gerarchica (e qui si torna al discorso di poco fa) e l'accesso in lettura.

pare93
16-12-2010, 14:23
Ho provato a seguire questa guida : http://support.microsoft.com/kb/303974
E il codice che ho creato è questo :

private void btnCerca_Click(object sender, EventArgs e)
{
lstBoxFilesTrovati.Items.Clear();
txtFile.Enabled = false;
cboCartelle.Enabled = false;
btnCerca.Text = "Ricerca ...";
Application.UseWaitCursor = true;
Application.DoEvents(); // Elabora tutti i messaggi di Windows
CercaCartella(cboCartelle.Text);
btnCerca.Text = "Cerca";
Application.UseWaitCursor = false;
txtFile.Enabled = true;
cboCartelle.Enabled = true;
}

private void CercaCartella(string percorso)
{
try
{
foreach (string d in Directory.GetDirectories(percorso))
{
foreach (string f in Directory.GetFiles(d, txtFile.Text))
lstBoxFilesTrovati.Items.Add(f);
CercaCartella(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}

private void Form1_Load(object sender, EventArgs e)
{
cboCartelle.Items.Clear();
foreach (string d in Directory.GetLogicalDrives())
cboCartelle.Items.Add(d);
cboCartelle.Text = @"C:\";
}

Ma non mi trova niente sapete dirmi il perchè? Non riesco a trovare l' errore

pare93
18-12-2010, 15:32
up

pare93
20-12-2010, 14:57
Up

pare93
21-12-2010, 13:45
Sono riuscito a costruire un algoritmo abbastanza semplice ma efficace. Per chi volesse un chiarimento mi contatti via MP.