2016-08-01 30 views
1

Ich verwende internalDataPath in meinem Native die, wenn sie zur Laufzeit zugegriffen sieht ungefähr so ​​aus:Android NDK internalDataPath - Schreiben in die Datei

"/data/data/app.name/files" 

Ich versuche dann, wie so in die Datei zu schreiben:

In diesem Fall wird die Fopen fehlschlagen und wird nicht öffnen Sie die Datei, die realistisch bedeutet, dass die anderen Funktionen nicht aufgerufen werden, experimentierte ich mit Blick auf das Dateisystem und ich Stattdessen versuchte es den folgenden Pfad.

Dies funktioniert, erstellt die Datei und ermöglicht es den anderen Funktionen, die Datei zu schreiben und zu schließen.

Meine Frage ist, wie kommt internalDataPath beginnt mit /data/ statt /Android/? Habe ich bei der Einrichtung meiner Anwendung etwas falsch gemacht? Soll ich eine andere Funktion aufrufen?

Es ist auch erwähnenswert, dass

externalDataPath = "/storage/emulated/0/Android/data/app.name/files" 

was bedeutet, dass für dieses Gerät (die keine externe SD hat) es auf den richtigen internen Dateien Pfad verweist.

Lassen Sie mich wissen, wenn etwas davon unklar ist oder Sie weitere Informationen benötigen.

Dank

+0

Welche Geräte und Version ist das?Ich habe nicht den 'Android'-Ort, nur' Daten 'an der Wurzel und das wird von' internalDataPath' zurückgegeben, also funktioniert 'fopen' in einem ähnlichen Beispiel gut für mich. –

+0

Gerät: Nexus 7 Tablet (2012) Version: Android 5.1.1 (LMY47V) Es ist mein Entwicklungsgerät, so dass es eine angemessene Anzahl von Blitzen und Wurzeln usw. gesehen hat, so vielleicht ist es gerade in einen gebrochenen Zustand geraten ... Mein Galaxy S6 auf Android 6 scheint sowohl den Ordner "Android" als auch den Ordner "data" im Pfad "/ storage/emulated/0" zu haben. – Maddius

+0

Ich habe es auf Nexus 7 2013 mit Android 6.0.1 getestet. Ich bin mir nicht sicher, was dazu führen könnte, dass die 'internalDataPath'-Variable auf einen ungültigen Pfad verweist. Hast du schon versucht, einen Werksreset durchzuführen? –

Antwort

0

Ich habe mkdir() wird die gesamte internalDataPath Baum, um sicherzustellen, definitiv erstellt, und es scheint auf meinem Nexus 7 gearbeitet zu haben, habe ich die Dateien mit ES Datei Explorer erstellt werden sehen können.

Es funktioniert auch auf meinem Galaxy S6, aber ich kann nicht wirklich die Dateien im ES File Explorer sehen, aber es funktioniert, weil die Datei beim nächsten Neustart geladen und gelesen wird, so kann ich nur annehmen, dass ich nicht kann Sehen Sie sich die Datei an, da dieses Gerät nicht gerootet ist.

Es ist erwähnenswert, dass zwischen den Versionen von Android, internalData Pfad Standort geändert hat, zum Beispiel:

Nexus 7 (5.1.1): internalDataPath = /data/data/app.name/files

Galaxy S6 (6.0.1): internalDataPath = /data/user/0/app.name/files

Diese Pfade sind absolute, oder zumindest in Bezug auf das höchste Ansicht-able Stammverzeichnis in eS Datei-Explorer.

Nicht sicher, ob dies jemand helfen wird, war der Hauptteil des Problems wahrscheinlich meine eigenen Mangel an Wissen über das Android-Dateisystem, da es viele ähnlich strukturierte Verzeichnisse zu sein scheint, ist es einfach, verloren zu gehen .

Danke an Patrik und Dave für die Zeit, die sie mit mir verbracht haben.

+0

froh, dass dies für Sie arbeitet. Ich wäre immer noch interessiert zu wissen, welcher Mechanismus normalerweise verantwortlich ist, um diese Verzeichnisse zu erstellen, da dies automatisch bei der ersten Ausführung in meinen Testfällen auf 4.2.2 und 6.01 geschieht –