функция. Или использовать

ли другой способ записать файл куда-нибудь еще, кроме SD-карты?

Я пробовал много разных путей в файловой системе, но fopen всегда возвращает NULL, за исключением любого файла, который я пишу / читаю в / sdcard / ...

Есть ли что-то еще эквивалентное:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Что позволяет писать как в файловой системе или как?

 vgokul12908 окт. 2014 г., 10:36
Ответили по этой ссылке: <stackoverflow.com/questions/1992953/...>

Ответы на вопрос(3)

в котором находится ваше приложение.

Этот каталог обычно:

data/data/<Your_package_name_usually com.android.appName>/files/<your_filename>

но лучше использоватьgetFilesDir() чтобы обеспечить действительный путь к файлу с будущими изменениями версии Android.

Если вы хотите вместо этого использовать внешнее хранилище, убедитесь, что вы поместили эту строку кода в манифест своего приложения, чтобы получить разрешение.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Затем используйте каталог sdcard:

getExternalStorageDirectory(); //usually : /sdcard/<your_filename>

В противном случае вы можете получить root права на устройство и получить доступ ко всей файловой системе. Но перед использованием приложения вам нужно будет попросить всех пользователей вашего приложения получить root-доступ на своем устройстве. Некоторые игры используют этот способ, но я бы не стал его рекомендовать. Если вы все еще хотите сделать это, ищитеSuperuser приложение для Android, это бесплатно и надежно.

Если у вас есть каталог android, просто создайте собственный метод JNI, который получает параметр jstring, и вы настраиваете его в своем собственном коде. Преобразуйте его в std :: string, и вы будете готовы использовать его с fopen ().

//Inside your java activity
File f = this.getApplicationContext().getFilesDir(); 
LibLoader.setupArchiveDir(f.toString());

//Inside your JNI wrapper
JNIEXPORT bool JNICALL Java_com_android_appName_LibLoader_setupArchiveDir(JNIEnv * env, jobject obj, jstring dir)
{
        const char* temp = env->GetStringUTFChars(dir, NULL);
    std::string stringDir(temp);

        // Will be receive as a std::string inside C++ code 
    MyNativeObjectInC++->SetupArchiveDir(stringDir);
}

Редактировать :

Возможно, вам придется вручную создать / файлы в C, прежде чем вы сможете использовать его в первый раз:

int result_code = mkdir("/data/data/com.app/files/", 0770)

Ура!

 amin23 мар. 2015 г., 08:03
какие флаги0770 содержится в последнем примере кода.mkdir("/data/data/com.app/databases", S_IRWXU | S_IRWXG | S_IWOTH | S_IXOTH); не работает для меня :(

fopen(filePath, "a+") функция. Или использоватьfopen(filePath, "a")

SDCard и специальному каталогу данных для вашего приложения. Любое другое место запрещено, если у вас нет прав root.

 CaseyB19 янв. 2011 г., 18:41
Вы можете узнать у ОС, где находится каталог в Java, с помощью следующих команд: mContext.getFilesDir (); mContext.getExternalFilesDir (нуль); Вы должны отдавать предпочтение внешнему хранилищу для больших объектов, поскольку устройство может иметь ограниченное внутреннее хранилище.
 bobmc19 янв. 2011 г., 05:52
Где находится этот «каталог специальных данных»? Потому что я предполагаю, что не все телефоны имеют SD-карту ... Так что / SDCard / DIR. не надежно ТИА
 Arjun30 сент. 2016 г., 10:33
У меня есть root-доступ к устройству. Не могли бы вы объяснить, как я могу получить доступ к файловой системе. Попытка открыть файл в системе не работает для меня. Пожалуйста, проверьте этоссылка

Ваш ответ на вопрос