Не удается записать в файл в эмуляторе Android - PullRequest
4 голосов
/ 16 июня 2011

Описание проблемы

Я пишу приложение для Android и использую собственный код, и тестирую его на Android-Emulator .Чтобы увидеть, что происходит в коде JNI, я создаю файл в папке Android / data / LogTest / и записываю в него информацию моего журнала.

FILE * pFile;
pFile = fopen ("/data/LogTest/Log.txt"", "w");
// .... 
// Write some logs to file ...
// ....

КогдаЯ запускаю приложение Android впервые, все идет хорошо, я вижу журналы в файле Log.txt.Но когда я закрываю приложение Android и запускаю его снова, ничего не происходит.Как приложение не может записывать журналы в файл во второй раз.

Self Ideas

Я думаю, что основная причина этой проблемы заключается в том, что, когда я создаю файл в первый раз, имя создателя приложения для ex.456 после того, как я пытаюсь записать дополнительную информацию в файл приложения.856 и т. Д. приложение 856 не может записать в файл, который создал приложение 456 .

Вопрос

  1. Как я могу запустить приложение с тем же именем, чтобы Android позволил мне записать в файл во второй раз.
  2. Или, может быть,Основная причина проблемы не в том, что приложение каждый раз получает случайные имена.

Ответы [ 2 ]

1 голос
/ 19 июня 2011

ваш код генерирует ошибку на моем эмуляторе.Тем не менее, вы говорите

Когда я запускаю приложение Android в первый раз, все идет хорошо, я вижу журналы в файле Log.txt

Возможно, вы могли бы отправить нам большеВаш код, чтобы мы могли воспроизвести ошибку.
Это моя попытка воспроизвести ваш вопрос

#include<stdio.h>
#include<jni.h>
#include<android/log.h>//allow android logging
#include<errno.h>//for errors
#include<string.h>

#define  LOG_TAG    "DEO MSG"//all my logs are labeled with this
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

void Java_com_deo_MyActivity_writeLogFileUsingC(JNIEnv * env, jobject thisObject)
{   char filename[]="/data/LogTest/Log.txt";
    LOGE("native method started");//is used exactly like the usual printf()
    FILE * pFile;
    LOGE("trying to open file for writing");
    pFile= fopen(filename, "w");
    if(pFile==NULL)
    {
        LOGE("Failed to open the file %s in mode 'w'.(DETAILS)%s ",filename,strerror(errno));
    }
    else
    {
        LOGE("trying to write to file");
        fprintf(pFile,"logExample  "); //example of a log.
        fclose(pFile);//safely close our file
        LOGE("file writing done");
    }
}

Ошибка, сгенерированная в logcat:

ERROR/DEO MSG(816): Failed to open the file /data/LogTest/Log.txt in mode 'w'.(DETAILS)No such file or directory

Я думаю, что моя проблема с вашим кодом можетбыть разрешения.Опишите это подробнее для нас.
PS:

  • Я лично предпочитаю использовать logcat для отладки по сравнению с файлами журналов
0 голосов
/ 19 июня 2011

Я думаю, вам не разрешено писать в эту папку. Прочитайте ответы здесь. Для хранения файлов используйте карту SDK или каталог приложения.

Файловые операции в Android NDK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...