마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

JNI에서 S_ISDIR이 작동하지 않습니다.

0 추천
const char *str = env->GetStringUTFChars(path, 0);

struct dirent **direntp;
int n, i;
struct stat statbuf;
char fullpath[1024];

jstring strbuf;

n = scandir(str, &direntp, 0, alphasort);
jobjectArray  tmp = (jobjectArray)env->NewObjectArray(n, env -> FindClass("java/lang/String"), env -> NewStringUTF(""));

for (i = 0; i < n; i++) {
    sprintf(fullpath, "%s%s", str, direntp[i] -> d_name);
    stat(fullpath, &statbuf);
    if (S_ISDIR(statbuf.st_mode) == 0) {
        __android_log_print(ANDROID_LOG_DEBUG, "JNI", "[폴더]  %s", direntp[i] -> d_name);
        strbuf  = env-> NewStringUTF( direntp[i]->d_name);
        env -> SetObjectArrayElement(tmp, i, strbuf);
    }
    else{
        __android_log_print(ANDROID_LOG_DEBUG, "JNI", "[파일]  %s", direntp[i] -> d_name);
        strbuf  = env-> NewStringUTF( direntp[i]->d_name);
        env -> SetObjectArrayElement(tmp, i, strbuf);
    }

}

자바코드에서 

Environment.getExternalStorageDirectory()

메소드를 통해 루트 디렉토리를 네이티브 코드로 넘긴 후 path에 해당하는 디렉토리를 탐색해서 각 아이템이 디렉토리인지 파일인지를 구분하려 합니다.

허나 S_ISDIR(statbuf.st_mode)이 작동하지 않고 디렉토리도 전부 파일로 인식하네요.

path에 '.'만 넣으면 잘 동작하는데..어떻게 방법이 없을까요?

 

gearex2003 (220 포인트) 님이 2017년 6월 26일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...