Italian Cancellare un file

nonno

Active Member
Licensed User
Longtime User
Ciao ragazzi, avrei un problema:( ho una Listview ( lv1 ) che inserisce i nomi dei file al suo interno, premendo su di esso lo rimuove dall'elenco, quando rientro me lo ritrovo li tutto come prima, non riesco a cancellarlo fisicamente, :mad: potete dirmi dove sto sbagliando ? , sia nel logs che sul dispositivo non da errori.
Grazie 1000


Sub lv1_ItemLongClick (Position As Int, Value As Object)
Dim fx As String = Value & ".txt"

' con delete dovrebbe eliminarlo
File.Delete(File.DirRootExternal,fx)

'rimuove dall'elenco
lv1.RemoveAt(Position)

End Sub
 

udg

Expert
Licensed User
Longtime User
Non so se possa essere il tuo caso, ma hai letto questo thread?
 

nonno

Active Member
Licensed User
Longtime User
Non so se possa essere il tuo caso, ma hai letto questo thread?
Grazie 1000 udg
ho guadato il thread, non ho risolto il problema.
la cosa strana che nella variabile fx ho il nome del file che voglio eliminare, per cui lo dovrebbe cancellare !!!:rolleyes:
 

udg

Expert
Licensed User
Longtime User
Se puoi escludere l'aspetto permessi dovuto alla versione di Android, prova a verificare se scrivendo nella ListView per caso alteri il nome dei file nel senso di maiuscole/minuscole (idem per l'estensione).
 

LucaMs

Expert
Licensed User
Longtime User
Potresti fare una cosa più "completa" creando un tuo tipo, ad esempio:

B4X:
Type tFile(Dir As String, Name As String).

Quando riempi la ListView, crei un oggetto di tipo tFile e lo passi all'Item (cioè sarà il Value dell'Item):

B4X:
Dim objFile As tFile
objFile.Initialize
objFile.Dir = File.DirRootExternal
objFile.Name = "NomeDelTuoFile.xxx"

ed alla selezione:

B4X:
Sub lv1_ItemLongClick (Position As Int, Value As Object)

    Dim objFile As tFile = Value
    File.Delete(objFile.Dir, objFile.Name)

    'rimuove dall'elenco
    lv1.RemoveAt(Position)

End Sub


[Eliminarlo direttamente senza chiedere conferma è un rischio; l'utente potrebbe aver toccato per errore un item diverso da quello voluto]
 

udg

Expert
Licensed User
Longtime User
Questa volta sono parzialmente d'accordo con @LucaMs
Concordo sulla verifica con l'utente che davvero voglia eliminare quel particolare file.
Non concordo sul tipo di dati suggerito perchè risulterebbe in una struttura dati non normalizzata (ovvero la Dir ripetuta identicamente tante volte quanti sono i file).
Piuttosto potresti avere un tipo che memorizzi il nome corretto dei file ed una sua versione semplificata per la visione tramite ListView. Ad esempio:
B4X:
Type tFile(DisplayName As String, FileName As String)
'FileName = "FotoTessera.jpg"
'DisplayName = Foto in formato tessera per passaporto"
Ovviamente se il DisplayName va ricavato dal FileName reale, allora più che convertire tutto in maiuscole/minuscole/Misto ed eliminare le estensioni non puoi fare..
 

udg

Expert
Licensed User
Longtime User
Vero. Ora sono parzialmente d'accordo con me stesso...eheh
E mi preparo un caffè !
 

udg

Expert
Licensed User
Longtime User
Ehilà, oggi sei sincronizzato con gli orari di tutti noi ! Un avvenimento.. eheh
 

nonno

Active Member
Licensed User
Longtime User
da ieri cerco usare l'esempio di luca, da degli errori, la colpa è sicuramente mia perché non ho capito bene... vi terrò informati ;)
scusate, nel caso no trovo il file il comando delette dovrebbe dare errori ?
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
la colpa è sicuramente mia perché non ho capito bene.
Non è che io abbia spiegato nei dettagli, quindi diciamo che sicuramente condivido la "colpa" :D.

[Codice appena scritto, non provato]
B4X:
Sub Process_Globals
    Type tFile(Dir As String, Name As String)
End Sub

Sub Globals
    Dim lv As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
    For i = 1 To 10
        Dim objFile As tFile
        objFile.Initialize
        objFile.Dir = "xxx"
        objFile.Name = "yyy"
        lv.AddSingleLine2("Testo " & i, objFile)
    Next
End Sub

Sub lv_ItemLongClick (Position As Int, Value As Object)
    Dim objFile As tFile = Value
    Log(objFile.Dir)
    Log(objFile.Dir)
    ' lv.RemoveAt(Position)
End Sub

Meglio usare il LongClick, gli utenti sono più abituati a questo (e chiedere conferma prima di eliminare)
 
Top