Italian Esistenza di una cartella, se no crearla

3394509365

Active Member
Licensed User
Longtime User
No saprei come fare a vedere se una cartella in un determinato percorso existe oppure no e se non esiste crearla.

intanto ho provato questo, ma secondo me crea la cartella ma non la vedo

File.MakeDir(File.DirAssets,"NewFolder")
File.MakeDir(File.DirInternal,"NewFolder")
 
Last edited:

Lello1964

Well-Known Member
Licensed User
Longtime User
prova con questa funzione :

MyPath = File.DirRootExternal & "/My Files/Pictures/Xmas"

If File.Exists(MyPath, "") = False Then
Your Code . . . . .
End If
 

Lello1964

Well-Known Member
Licensed User
Longtime User
 

drgottjr

Expert
Licensed User
Longtime User
File.DirAssets non è una "cartella" come le altre. non puoi creare "sub-cartelle".

per File.DirInternal, el tuo codice funziona se fai una prova dopo (almeno funziona per me)
B4X:
    File.MakeDir(File.DirInternal,"NewFolder")
    If File.Exists(File.DirInternal,"NewFolder") And File.IsDirectory(File.DirInternal, "NewFolder") Then
        Log("OK in File.DirInternal")
    End If

se vuoi sapere se esiste "NewFolder", fai la prova prima:
B4X:
    If File.Exists(File.DirInternal,"NewFolder") = false  Then
        log("a creare la cartella...")
        File.MakeDir(File.DirInternal,"NewFolder")
    end if

   ' e dopo:
    If File.Exists(File.DirInternal,"NewFolder") And File.IsDirectory(File.DirInternal, "NewFolder") Then
        Log("OK in File.DirInternal")
    End If
 

3394509365

Active Member
Licensed User
Longtime User
B4X:
If File.Exists(File.DirInternal,"NewFolder") = false  Then
        log("a creare la cartella...")
        File.MakeDir(File.DirInternal,"NewFolder")
    end if

   ' e dopo:
    If File.Exists(File.DirInternal,"NewFolder") And File.IsDirectory(File.DirInternal, "NewFolder") Then
        Log("OK in File.DirInternal")
    End If

Il codice semra che crea la cartella, infatti se ci passo la seconda vilta dice che esiste, ma su tablet non la trovo da nessuna parte, ne se la creo nella memoria interna nè su quella esterna.

Cosa succede?
 

LucaMs

Expert
Licensed User
Longtime User
Succede che solo la tua app può accedere a quella cartella, la DirInternal (non è per niente è... internal) e questo è un bene, nemmeno le altre app possono farlo.

Potresti vedere un file o cartella eventualmente creati nella DirRootExternal.
 

drgottjr

Expert
Licensed User
Longtime User
e non dimenticare il permesso per accedere a DirRootExternal. (DirInternal e meglio, ma l'app è tua).

rispetto alla nuova cartella, cosa vuoi dire cuando dici que non la trovi dopo crearla? se esiste, l'hai trovato. fai una piccola prova: crea un file di testo, salvalo nella nuova cartella e dopo aprilo per leggere il testo. se riesci, sono là
 

3394509365

Active Member
Licensed User
Longtime User
Sono di nuovo alle prese col dilemma delle cartelle.
Sto facendo un' app che ha un database interno che installo insieme all' app, dopo di che il database dovrebbe andare a prendere delle foto in una cartella del telefonino o tablet, in un percorso specifico.



In quale memoria mi consigliate di crearela cartella contenente le foto?

Va bene qui la domanda o devo aprire un nuovo thread?

grazie
 

drgottjr

Expert
Licensed User
Longtime User
stesso tema, stessoo filo. File.DirInternal. normalmente.
ma sappiamo poco (nulla) della app. e non sappiamo che cosa a che vedere il db con le foto... cosa stai pianificando?

e una volta di piu:
1) non dimenticare di copiare el db da dirassets a dirinternal al lanciare la app la prima volta. la prima prima volta.
2) non copiare el db ciecamente ogni volta che si lancia l'app. capisci? fai una prova ( se non esiste il db in file.dirinternal, allora copialo. se esiste e lo copi, lo soprascrivi. d'accord? un errore comune.
 

3394509365

Active Member
Licensed User
Longtime User
1-Come mai devo: non dimenticare di copiare el db da dirassets a dirinternal al lanciare la app la prima volta. la prima prima volta. ?
Risp- Il db lo tengo in dirassets. Ma se dite che è meglio copiarlo lo posso fare tranquillamente.

2-non copiare il db ciecamente ogni volta che si lancia l'app. capisci? fai una prova ( se non esiste il db in file.dirinternal, allora copialo. se esiste e lo copi, lo soprascrivi. d'accord? un errore comune.
Risp- si io lo installo solo se già non è presente anche perchè se non gli sovrascrivo le modifiche che man mano l' utente farebbe in locale sul telefonino.
L' unico cosa è che io l' ho sempre lascitato in dirassets. è due anni che io la uso.

Cmq la mia app ha delle tabelle in un db ogni tabella ha dei record con dei dati e delle foto associate ad ogni record. se decido di caricare la tabella X allora ho un tot di record ed ogni record che viene selezionato viene richiamata uno a più immagini associate a quel record.

L' utente può creare tabelle ex novo,aggiungere campi a tabelle ecc ed aggiungere foto apiacimento.

Quindi una volta installato il db vuoto l' utente lo popola a piacimento.

Io la usa da almeno tre anni sul mio tablet e non mi ha dato problemi.

Ma se decido di distribuirla vorrei non incasinare i telefoni della gente, per questo chiedo consiglio e poi ci sono le autorizzazioni da considerare.
 

3394509365

Active Member
Licensed User
Longtime User
Cmq sapevo pure io che DirAssets è di sola letturaperò io ho sempre creato nuovi record e nuove tabelle e non ho mai avuto problemi.

Vero è però che non ho mai esportato il db, magari non lo posso fare e perderei le modifiche.

Quindi mi converrebbe creare una cartelle e dentro crearvi il db e poi crearvi la cartella che contiene le foto?
 

drgottjr

Expert
Licensed User
Longtime User
non vai a incasinare i telefonini dei utenti non importa dove metti il db. si consiglia metterlo in dirinternal
poiché appartiene all'app. se vuoi usare direxternal, hai bisogno di un "permesso" (runtime permission). l'utente
non lo chiede, l'app lo chiede dal utente ("chiedo permesso di usare la tua camera"). google lo richiede. se
l'utente lo nega, l'app no funziona. punto. questo succede la prima volta che l'utente lancia l'app. se credi
che puoi lasciare il db in dirassets, va be'. non funzionerà, ma non incasinará il telefono.
 
Last edited:
Top