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에 '.'만 넣으면 잘 동작하는데..어떻게 방법이 없을까요?