当前位置: 代码迷 >> Android >> android ndk下文件遍历与剔除
  详细解决方案

android ndk下文件遍历与剔除

热度:83   发布时间:2016-04-28 04:51:37.0
android ndk下文件遍历与删除
       在做手机开发过程中,难免要进行一些本地文件管理操作,比如很多常见app如微博、微信等都有清除缓存功能,该功能就是遍历app自己的缓存目录,然后删除全部缓存文件。使用java的File类可以实现本地文件遍历及删除等等功能,如果使用ndk的方式该如何实现呢?以前写过《基于c++使用win32 api遍历文件夹》,由于android ndk平台属于linux系统,所以该方式是无法使用的。通过查找linux下文件管理相关资料,顺利实现了文件遍历与删除功能,下面为相应代码,需要包含<dirent.h>头文件。
// 删除指定文件夹内所有文件JNIEXPORT void JNICALL Java_com_test_util_T_deleteFiles(JNIEnv *env, jclass obj, jstring fileFolder){	const char *file_folder = (*env)->GetStringUTFChars(env, fileFolder, 0);	DIR *pDir = NULL;	struct dirent *dmsg;	char szFileName[128];	char szFolderName[128];	strcpy(szFolderName, file_folder);	strcat(szFolderName, "/%s");	if ((pDir = opendir(file_folder)) != NULL)	{		// 遍历目录并删除文件		while ((dmsg = readdir(pDir)) != NULL)		{			if (strcmp(dmsg->d_name, ".") != 0 && strcmp(dmsg->d_name, "..") != 0)			{				sprintf(szFileName, szFolderName, dmsg->d_name);				remove(szFileName);			}		}	}	if (pDir != NULL)	{		closedir(pDir);	}	(*env)->ReleaseStringUTFChars(env, fileFolder, file_folder);}
       顺便给出另一种实现方式,这种文件遍历方式需要包含<io.h>头文件,在windows环境下测试可以用,但是移植到android ndk环境下,编译时提示无法找到该头文件,原因可能是我的ndk路径配置问题,后来没有再细查具体原因。
long hFile = 0;struct _finddata_t file_info;hFile = _findfirst("test\\*", &file_info);while (_findnext(hFile, & file_info) == 0){	if (strcmp(file_info. name, ".") != 0 && strcmp(file_info. name, "..") != 0)	{		printf("%s\n", file_info.name);	}	else	{		printf("%s\n", "invalid");	}}_findclose( hFile);


  相关解决方案