2014-01-29 142 views
1

我真的很新的android ndk,我感謝任何幫助。如何使用檢查擴展在C++中創建遞歸文件夾掃描?我知道在java中很容易做到。在java中,我使用這個:遞歸掃描SD卡android ndk

public void scan(File root) { 
     File[] list = root.listFiles(tracksFilter); 
     for (File f : list) { 
      String path; 
      if (f.isDirectory()) { 
       scan(f); 
      } else if(path.endWith(".mp3"){ 
       doMP3(f); 
      } else if(path.endWith(".png"){ 
       doPNG(f); 
      } 
     } 
    } 
+0

男子3 readdir的,或者如果你不是一個UNIX風格的開發機器上,看到http://linux.die.net/man/3/readdir –

+0

你也可以看看Android的mediascanner來源[MediaScanner.java](https://android.googlesource.com/platform/frameworks/base/+/master/media/java/android/media/MediaScanner.java) - > [android_media_MediaScanner.cpp](https:// android.googlesource.com/platform/frameworks/base/+/master/media/jni/android_media_MediaScanner.cpp) - > [MediaScanner.cpp](https://android.googlesource.com/platform/frameworks/av/+/ master/media/libmedia/MediaScanner.cpp) – zapl

+0

爲什麼不直接從C++端對Java代碼進行JNI調用? – eozgonul

回答

1

值得注意的是,本機代碼並不總是會因爲多種原因而導致性能提升。在您的Java代碼和等效的本機代碼之間進行速度比較可能會有所幫助。結果可能會讓你大吃一驚:)

這就是說,下面的C++代碼應該讓你朝着正確的方向前進。

... 
#include <dirent.h> 
#include <string> 
#include <iostream> 
.... 
static const string curDir = "."; 
static const string parDir = ".."; 
.... 
void iterateDir(string path) 
{ 
    DIR *dir; 
    struct dirent *drnt; 
    dir = opendir(path.c_str()); 
    while ((drnt = readdir(dir)) != NULL) 
    { 
     string name(drnt->d_name); 
     unsigned char = drnt->d_type; 
     if (name != curDir && name != parDir && name.length() >= 4) 
     { 
      if (type == DT_DIR) { 
       string newPath = path + name + "/"; 
       iterateDir(newPath); 
      } 
      else if (name.find(".mp3") == (name.length() - 4)) { 
       doMP3(path + name); 
      } 
      else if (name.find(".png") == (name.length() - 4)) { 
       doPNG(path + name); 
      } 
     } 
} 
+0

感謝您的幫助!最後我決定使用java進行目錄掃描 –