05/11/09 17:08
Daniele93
Buona sera a tutti. Ho riscontrato un problema pratico in un programma che sto realizzando e che permette di gestire ,per adesso nomi e cognomi, ripescandoli da una directory attraverso nomi di cartelle (Composte da 'CognomeNome') e inserendoli in una listbox. è anche possibile riceracre la persona desiderata attravero un campo di ricerca... Ecco il problema quando pesco le cartelle dalla directory "C:\Lavoro" non ottengo il nome della cartella ma bensì il percorso completo. Ecco che nasce la domanda,ovvero, come faccio a togliere il percorso che mi si aggiunge automaticamente?
Lo sò che state pensando: Xkè diavolo non usa un DB? se deve pure fare le ricerche!
Non so se ci sia una risposta precisa ma ci sono molti motivi... Comunque aspetto vostre risposte grazie!
'Codice che effetua la ricerca
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim cont As Integer
Dim sai As String
ListBox1.Items.Clear()
cartelle = System.IO.Directory.GetDirectories("C:\Lavoro").ToArray
For Each bo As String In cartelle
sai = cartelle(cont).ToString()
If sai = TextBox1.Text Then
ListBox1.Items.Add(sai)
cont = cont + 1
Else
cont = cont + 1
End If
Next
End Sub
Ultima modifica effettuata da Daniele93 05/11/09 17:15
aaa
05/11/09 18:43
lorenzo
beh, se la directory è sempre C:\Lavoro potresti estrarre dal path completo una sottostringa a partire dalla posizione della seconda / presente da sinistra
se può cambiare allora, parti da destra ed estrai come sottostringa fino a che non incontri la prima occorrenza della / andando a sinistra
ps: magari esiste una funzioe apposita...io conosco solo Path.GetFileName ma serve solo per il file, non per le directory
aaa
05/11/09 19:01
Daniele93
Per adesso durante le prove del programma e la stesura delle basi usavo String.Remuve poi provero i metodi consigliati da tè... anche perchè la directory cambia.
Grazie dell' aiuto!
Adesso è sorto un' altro problema...
Prima analizzavo solo le cartelle all' interno di UNA cartella (Lavoro) ma ora sono a un punto in cui devo analizzare tutti i file all' interno di tutte le sottocartelle. Ad esempio: Analizzo i file di: "C:\Lavoro\MarioRossi" poi di "C:\Lavoro\LucaBianchi", ecc...
Io avevo pensato di creare un' array che contenesse le cartelle e uno che per ogni cartella contenuta mi controllasse il file desiderato e se trovasse corrispondenza con i criteri di ricerca lo scrivesse nella listbox, il codice è piu o meno simile a quallo precedente ma cosa devo mettere come tipo?
For Each ... In CartelArray
Cosa metto al posto dei puntini?
Grazie ancora!
P.S. se devo aprire un nuovo topic ditemelo...
Ultima modifica effettuata da Daniele93 05/11/09 19:02
aaa
06/11/09 16:50
Daniele93
Grazie, ma il codice non trova le informazioni della cartella? a me serve che prenda tutte le cartelle per ogni cartella controllare i file e per ogni file leggerene il contenuto e se corrispondente alla ricerca scriverlo.
Qualcosa ho steso da solo, ma adesso è nato un' altro problema, cioè che mi dice che ho un indice di vettore che non esiste (L' errore è: Indice oltre i limiti della matrice.) quando invece dovrebbe esserci:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim file As Array
Dim cont As Integer
Dim valore As String
Dim cartelle As Array
cont = 0
cartelle = System.IO.Directory.GetDirectories("C:\Lavoro").ToArray
For Each path As String In cartelle
file = System.IO.Directory.GetFiles(cartelle(cont)).ToArray
For Each boe As String In file
valore = My.Computer.FileSystem.ReadAllText(file(cont))
If TextBox1.Text = valore Then
ListBox1.Items.Add(valore)
cont = cont + 1
Else
cont = cont + 1
End If
Next
Next
End Sub
Praticamente secondo lui file = System.io.directory.getdirectory("C:\Lavoro"
.ToArray non produce array! perchè nemmeno con indice 1 me lo trova! Eppure ho usato lo stesso codice in altre form e anche nel cosice postato prima! Qualcuno sà dirmi dov' è l'errore? Io dopo 4ore non l' ho ancora trovato! Magari è sciocchissimo...
Ultima modifica effettuata da Daniele93 06/11/09 16:51
aaa
06/11/09 19:45
noitide
allora questo è il codice ke ho modificato e così funziona.
ListBox1.Items.Clear()
Dim totale As New ArrayList
totale.Clear()
Dim valore As String
For Each c As String In System.IO.Directory.GetDirectories("C:\Users\Davide\Desktop", "*", IO.SearchOption.AllDirectories)
For Each file In System.IO.Directory.GetFiles(c, "*", IO.SearchOption.AllDirectories)
Dim nome As New FileInfo(file)
Dim leggi As New StreamReader(file)
valore = leggi.ReadToEnd
If valore.Contains(TextBox1.Text) = True Then
ListBox1.Items.Add(nome.Name)
totale.Add(1)
End If
Next
Next
If totale.Count = 0 Then
MsgBox("Non è stato trovato nulla secondo i criteri di ricerca")
End If
allora rispetto al tuo codice ci sono passaggi in meno e cose tolte xk inutili.
guardalo ke ti ho commentato cosa ho modificato/tolto.
Postato originariamente da Daniele93:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim file As Array ' queste variabili sono inutili in quanto si può mettere direttamente System.io.directory. etc xk restituisce un array
Dim cont As Integer
Dim valore As String
Dim cartelle As Array
cont = 0
cartelle = System.IO.Directory.GetDirectories("C:\Lavoro").ToArray ' qui il toarray è inutile xk restituisce già un array (di stringhe in questo caso)
For Each path As String In cartelle
file = System.IO.Directory.GetFiles(cartelle(cont)).ToArray ' x quanto riguarda il toarray il commento è lo stesso di sopra.
For Each boe As String In file
valore = My.Computer.FileSystem.ReadAllText(file(cont)) 'qui tu usi l'indice di array per ricavare il file, ma è sbagliato xk ReadAllText vuole il percorso del file.
If TextBox1.Text = valore Then 'così facendo tu paragoni tutta una stringa ke può essere composta da "ciao gatto prova oca" con quello ke c'è scritto in textbox ke poniamo sia "prova", logicamente il vb ti dice ke "ciao gatto prova oca" non è uguale a "prova", quindi devi usare uno streamreader e il parametro contains
ListBox1.Items.Add(valore)
cont = cont + 1
Else
cont = cont + 1
End If
Next
Next
End Sub
spero di essere stato chiaro e utile..
EDIT: mi scuso con Totem per aver detto le stesse sue cose.. ma mentre lui scriveva io stavo scrivendo il mio post..
Ultima modifica effettuata da noitide 06/11/09 19:48
aaa
07/11/09 14:04
Daniele93
Per prima cosa grazie a tutti e due! Secondo, ho provato e il codice e funziona, e sono riuscito a capirlo... Mi sono permesso una modifica che scrive il nome della cartella e non il nome del file, mi scuso se avevo chiesto questo, ma dinuovo con il percorso intero ma il problema lo risolvero ancora con remuve(0, 10)...
Il mio modo di scrivere il codice (Almeno credo che coding significhi questo) purtroppo non l' ho imparato da nessuno... Sono autodidatta e solo da 2 mesi facciamo un pò di stesura di codice a scuola e magari mi affinerò lì... Hai ragione comunque! Sono molto confusionario e ho le idee poco chiare sugli array perchè è la 2° volta che li uso dopo gli esercizi... E poi per quanto rigurda il contatore è una mania... Anche se qui serviva (Secondo il mio sbagliato ragionamento) per incrementare l' indice che veniva usato...
Comunque Grazie a tutti del prezioso aiuto!
Ultima modifica effettuata da Daniele93 07/11/09 14:06
aaa