Italian Filemenager .... diciamo

Roberto Tsolakis

Member
Licensed User
Longtime User
Buongiorno a tutti.
Sto creando un applicazione che deve poter ricercare all'interno delle varie memorie un determinato tipo di file (xml). :sign0085:
Nel tutorial inglese si fa riferimento ad un FileSearch ... ma non riesco proprio a trovarlo! :BangHead:
Ho trovato online degli esempi, anche completi, ma leggono in modo errato le varie memorie, nel senso che spesso triplicano il nome dello stesso file oppure non ne vedono altri ... e controllando nella memoria specifica da filemanager invece ci sono e non ci sono doppioni.
Qualcuno mi può postare qualche esempio funzionante, tutti i file e directory devono essere inviati ad una listview ?
Grazie mille :D
 

Antonio1

Member
Licensed User
Longtime User
Buongiorno a tutti.
Sto creando un applicazione che deve poter ricercare all'interno delle varie memorie un determinato tipo di file (xml). :sign0085:
Nel tutorial inglese si fa riferimento ad un FileSearch ... ma non riesco proprio a trovarlo! :BangHead:
Ho trovato online degli esempi, anche completi, ma leggono in modo errato le varie memorie, nel senso che spesso triplicano il nome dello stesso file oppure non ne vedono altri ... e controllando nella memoria specifica da filemanager invece ci sono e non ci sono doppioni.
Qualcuno mi può postare qualche esempio funzionante, tutti i file e directory devono essere inviati ad una listview ?
Grazie mille :D

Ciao
Potresti usare ( vedi se fa al tuo caso) la libreria dialogs da scaricare qui con relativi esempi

Il codice che potrebbe interessarti è quello relativo alla visualizzazione dei files che devi estrapolare dall'esempio che puoi scaricare insieme alla libreria

Ricorda che devi installare la libreria e poi abilitarla nel pannello a destra dell'IDE di B4a

il pezzo di codice da considerare:
Sub btnFile_Click
Dim fd As FileDialog
fd.FastScroll = True
'fd.ShowOnlyFolders = True
fd.FilePath = File.DirRootExternal ' also sets ChosenName to an emtpy string
'fd.ShowOnlyFolders = true
'fd.FileFilter = ".txt" ' for example or ".jpg,.png" for multiple file types
ret = fd.Show("B4A File Dialog", "Yes", "No", "Maybe", Bmp)
ToastMessageShow(ret & " : Path : " & fd.FilePath & CRLF & "File : " & fd.ChosenName, False)
End Sub


Ciao
 

Roberto Tsolakis

Member
Licensed User
Longtime User
Ti ringrazio.
Ci guardo subito!

Strano però che debba essere utilizzata una libreria esterna per qualcosa che è già presente nel core. Come mai ?
 

Roberto Tsolakis

Member
Licensed User
Longtime User
La libreria funziona, ma quello che chiedo io è più semplice:
Prelevare la lista di una memoria (diciamo la dirassets) e inviare la lista in una matrice o in un listview.
Io avevo trovato questo tipo di soluzione, ma non mi funzionava, probabilmente per un errore di chi ha postato il sorgente (ora non riesco a trovarlo più)
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
Buongiorno a tutti.
Sto creando un applicazione che deve poter ricercare all'interno delle varie memorie un determinato tipo di file (xml). :sign0085:
Nel tutorial inglese si fa riferimento ad un FileSearch ... ma non riesco proprio a trovarlo! :BangHead:
Ho trovato online degli esempi, anche completi, ma leggono in modo errato le varie memorie, nel senso che spesso triplicano il nome dello stesso file oppure non ne vedono altri ... e controllando nella memoria specifica da filemanager invece ci sono e non ci sono doppioni.
Qualcuno mi può postare qualche esempio funzionante, tutti i file e directory devono essere inviati ad una listview ?
Grazie mille :D

Io sono nuovo di B4A e quindi più di tanto non so dirti,
ma non capisco perchè non usi la funzione File.ListFiles ??

Fai la scansione della cartella di partenza e ti memorizzi in una lista i nomi delle sottocartelle, poi fai una chiamata ricorsiva alla funzione che così farà la scansione di tutte le sottocartelle in maniera ricorsiva finchè non trova il file cercato, almeno io in VB6 ho fatto così.

Ti sto preparando del codice, porta pazienza un po'.

Sergio
 
Last edited:

Roberto Tsolakis

Member
Licensed User
Longtime User
Si appunto ...
avevo fatto una cosa del genere, mettendo in un array la lista,
ma poi come risultato mi veniva riproposta 0 files.

Dim ListaFile() As String
ListaFile= Array As String(File.ListFiles(File.DirRootExternal))

Label1.Text = ListaFile.Length-1
For a =1 To ListaFile.Length-1
ListView1.AddSingleLine(ListaFile(a))
Next

Ovviamente nella cartella ho controllato ... ci sono almeno una ventina di files.
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
Eccoti la routine che cerca un files anche nelle sottocartelle:

B4X:
Sub CercaFile(strDir As String, strFile As String) As String 
   
   Dim idx As Int 
   Dim LstDir As List
   LstDir.Initialize
   
   Dim Vs As String = ""
   
   Try
      Dim Lst As List = File.ListFiles(strDir)
   Catch
      Return ""
   End Try
   
   For idx = 0 To Lst.Size - 1
      ' riconosco dir o files
      If File.IsDirectory(strDir, Lst.Get(idx)) Then
         ' è una cartella, la aggiungo alla lista delle cartelle da controllare
         LstDir.Add(strDir & "/" & Lst.Get(idx))
      Else
         ' vedo se è il file che cercavo
         If strFile = Lst.Get(idx) Then
            Return strDir ' trovato !!
         End If
      End If
   Next

   If LstDir.Size = 0 Then Return "" ' non ci sono sottocartelle da controllare
   
   ' richiamo la cartella ricorsiva
   For idx = 0 To LstDir.Size - 1
      Vs = CercaFile(LstDir.Get(idx), strFile)
      If Vs <> "" Then Return Vs
   Next
      
   Return ""
   
End Sub

per chiamarla devi passargli la cartella da dove partire e il nome del file (che ti ricordo è case sensitive).

Ad esempio:
B4X:
Dim Vs As String  = CercaFile(File.DirRootExternal,"miofile.dat")

A questo punto se su Vs hai una stringa vuota vuol dire che non ha trovato il file, se invece lo trova ti ritorna la cartella dove si trova quel file

Spero di esserti stato utile

Sergio
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Scusa mi sono accorto ora che non è quello che volevi, io avevo capito che dovevi cercare un file nelle sottocartelle, invece rileggendo ho capito che devi cercare un TIPO di file, quindi (ad esempio) vorresti una lista di tutti i file che hanno come estensione XML ???

Ma cercando anche nelle sottocartelle o solamente nella cartella da te specificata ??

Sergio
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Si appunto ...
avevo fatto una cosa del genere, mettendo in un array la lista,
ma poi come risultato mi veniva riproposta 0 files.



Ovviamente nella cartella ho controllato ... ci sono almeno una ventina di files.

Prova a cambiare in:
B4X:
Dim ListaFile As List
ListaFile = File.ListFiles(File.DirRootExternal)

Label1.Text = ListaFile.Size-1
For a =1 To ListaFile.Size-1
ListView1.AddSingleLine(ListaFile.Get(a))
Next
 

Roberto Tsolakis

Member
Licensed User
Longtime User
Prova a cambiare in:
B4X:
Dim ListaFile As List
ListaFile = File.ListFiles(File.DirRootExternal)

Label1.Text = ListaFile.Size-1
For a =1 To ListaFile.Size-1
ListView1.AddSingleLine(ListaFile.Get(a))
Next


PREFETTO!!!!! Era il punto di partenza che cercavo!
Ovvio che anche il resto del codice è interessante!
 
Top