我想用C本地库读写sdcard下的aa.txt,已经建好了,可是用C编写的代码读写的时候总是不成功,代码如下(本地库的)Java_oo_oo_kkk_stringFromJNI( JNIEnv* env,
                                        jobject thiz )
{
       LOGI("MyJNI is called!");
       int fd,size;
       char s[]="11111",buffer[50];
fd=open(path,O_RDWR|O_CREAT);
LOGI("输出到了这个点B");
if(fd==NULL)
{
return (*env)->NewStringUTF(env, "文件打开失败");
}
write(fd,s,sizeof(s));
close(fd);
fd=open(path,O_RDONLY);
if(fd==NULL)
{
return (*env)->NewStringUTF(env, "文件读出失败");
}
size=read(fd,buffer,sizeof(buffer));
close(fd);
LOGI(buffer);
LOGI("输出到了这个点C");

       return (*env)->NewStringUTF(env,buffer);
}
请教做过的,有过经历的同学帮帮忙。QQ1053155108,晨听雨

解决方案 »

  1.   

    加点调试代码看看,函数有没执行成功什么的.只试过读NAND中的PNG图片,你有没SDCARD的读写权限?
      

  2.   

    要不先读个NANDFLASH中的TXT文件看看!!!
      

  3.   

    谢谢各位了 ,上面的问题解决了,后来用的fopen打开的,而不是直接用的open。权限问题
    我用的是fd=fopen(path,"rw");读写权限,成功读出sdcard/aa.txt里的内容,现在遇到一个困难,就是如何将java中的string参数传到C中变成char数组,就是string->jstring->char[],求一个代码例子,至于我这个例子,现将成功调试过得代码奉上
    const char *path = "/sdcard/ee.txt";
    jstring
    Java_com_test_JNITest_stringFromJNI( JNIEnv* env,
                                            jobject thiz )
    {
           LOGI("MyJNI is called!");
           int size;
           FILE *fd;       
           char a='b';
           char s[]="111111111",buffer[16];
           memset(buffer,0,16);
    fd=fopen(path,"rw");
    if(fd<0)
    {
    return (*env)->NewStringUTF(env, "444444444");
    }
    size=fread(buffer,sizeof(char),15,fd);
    fclose(fd);
    LOGI("0000000000000000000");
    LOGI(buffer);
    return (*env)->NewStringUTF(env, buffer);
          
    }
      

  4.   

    http://www.th7.cn/Article/bc/ja/200808/328118.html
    jstring和char*的转换,自己看看吧。
      

  5.   

    文件目录直接用const char *path = "/sdcard/ee.txt"; 这个可以么?