German Ein Ordner im Internen-Speicher

kaplanerkan

Member
Licensed User
Longtime User
Hallo,

ich habe eine kleines Problem mit dem Zugriff zu internen Speicher


Stiuation ist folgendes:
Hab ein kleiner Projekt und sieht so aus:

ProjectName -> Files -> Backup (darunter möchte ich die Backup-XML-Dateien speichern)
ProjectName -> Files -> Bestellungen (hier möchte ich die Bestellungen speichern)

und meine Code sieht so aus:

B4X:
Sub SaveOptions
    Dim TW As TextWriter
   
    TW.Initialize(File.OpenOutput(File.DirInternal  , "/Kasse10/test.txt", False))
    TW.WriteLine("Preis")
    TW.WriteLine("15")
    TW.Close
End Sub
Sub ReadOptions
    If File.Exists(File.DirInternal, "/Kasse10/test.txt") = False Then Return    
    Dim TW As TextReader
    TW.Initialize(File.OpenInput(File.DirInternal, "/Kasse10/test.txt"))
    Text = TW.ReadLine
    Preis = TW.ReadLine
   Log (Text)
   Log (Preis)
   Msgbox ("Gelesen:  " & Text & " " & Preis, "information")
   
    TW.Close
End Sub


Mit obigen Code bekomme ich folgende Fehlermeldung auf meinem Tablet:
B4X:
java.io.FileNotFoundException: /data/data/intern.speichern.test/files/Kasse/test.txt (No such file or directory)

Aber, wenn ich die ganze Dateien unter /data/data/intern.speichern.test/xxxx.XML speichere, kann lesen und schreiben.

Meine Frage ist, ich such eine Möglichkeit, dass man einen Ordner im Internen Speicher erstellen kann (zb: projektname->Files->Backup oder nur projektname->Backup). Kann mir jemand einen Tip geben?


danke im Voraus
 

klaus

Expert
Licensed User
Longtime User
Dieser Code funktioniert:
B4X:
Sub SaveOptions
    Dim TW As TextWriter
    
    If File.Exists(File.DirInternal & "/Kasse10", "*.*") = False Then
         File.MakeDir(File.DirInternal, "Kasse10")
    End If
    TW.Initialize(File.OpenOutput(File.DirInternal & "/Kasse10", "test.txt", False))
    TW.WriteLine("Preis")
    TW.WriteLine("15")
    TW.Close
End Sub
Sub ReadOptions
    If File.Exists(File.DirInternal & "/Kasse10", "test.txt") = False Then Return    
    Dim TW As TextReader
    TW.Initialize(File.OpenInput(File.DirInternal & "/Kasse10", "test.txt"))
    Text = TW.ReadLine
    Preis = TW.ReadLine
    Log (Text)
    Log (Preis)
    Msgbox ("Gelesen:  " & Text & " " & Preis, "information")
    
    TW.Close
End Sub
Beste Grüsse.
 

kaplanerkan

Member
Licensed User
Longtime User
danke klaus,

funktioniert wunderbar, hab ein Problem weniger.
Hab noch eine Frage.

Angenomm ich habe diese Datei vom Projeckt_1 wie unten gespeichert:

/data/data/Project_1/Backup/test.txt


Ich habe noch ein anderes Project_2.
Jetzt möchte ich vom Project_2 aus, diese "test.txt"-Datei vom Unterverzeichnis vom Project_1 lesen.

Meine jetzige working-directory ist jetzt so: /data/data/Project_2/
Wie muss ich dann folgende Zeile ändern, dass ich kontrolieren kann, ob diese "test.txt"-Datei unter Projeckt_1 vorhanden ist?

B4X:
If File.Exists(File.DirInternal & "/Kasse10", "test.txt") = False Then Return

danke
erkaN
 

klaus

Expert
Licensed User
Longtime User
Das geht leider nicht.
DirInternal ist ein Programm eigener Ordner und gehört zu diesem Programm.
Externe Programme haben keinen Zugriff auf diesen Ordner.
Wenn Du Dateien von verschiedenen Programmen aufrufen wills musst Du einen Orner in DirRootExternal mit Unterordner(n) erstellen.

Beste Grüsse.
 

kaplanerkan

Member
Licensed User
Longtime User
Das geht leider nicht.
DirInternal ist ein Programm eigener Ordner und gehört zu diesem Programm.
Externe Programme haben keinen Zugriff auf diesen Ordner.
Wenn Du Dateien von verschiedenen Programmen aufrufen wills musst Du einen Orner in DirRootExternal mit Unterordner(n) erstellen.

Beste Grüsse.


hmmm...
Trotzdem danke.
Problem ist, nicht jeder Tablet hat einen externen Speicher-Slot, nur intern. Zur Not muss ich dann versuchen, diese XML-Dateien auf dem Hauptserver
zu speicher und von dort auszulesen (vom projeckt2 aus).


Wenn ich die Cache-Speicher benutze, bleiben die Daten dann nur bis zum nächsten Reset? oder wenn das System nicht mehr Platz hat, dann löscht diese Cache?
 

kaplanerkan

Member
Licensed User
Longtime User
sorry..hat sich erledigt:


File.DirInternalCache

These two folders are stored in the main memory and are private to your application. Other applications, including file managers, cannot access these files. The cache folder may get deleted by the OS if it needs more space. If a new version of an app is installed, files in external or DirInternal storage are not disturbed.

The next two areas are external to the main memory. They are usually, but not always, an SD card. For example, the Archos 70-250G table has an internal 250G hard drive but no SD slot, so File.DirRootExternal accesses the hard drive.
 
Top