我已经实现了这个简单的功能,以便递归地清空文件夹(Xcode 5.1。目标平台iOS)。该函数为每个传递新目录路径的子目录调用自身。
但是在第一次递归调用后,path
参数在再次调用opendir
后归零。 path
参数现在是一个空字符串,我无法弄清楚原因。 stringstream buf
变量不会被销毁,AFAIK也不会被opendir
更改。
提前感谢您的帮助。
void emptyFolder(const char *path)
{
if (DIR *folder = opendir(path)) {
while (struct dirent *entry = readdir(folder)) {
if (strcmp(entry->d_name,".") == 0 ||
strcmp(entry->d_name,"..") == 0)
continue;
std::stringstream buf;
buf << path << '/' << entry->d_name;
const char *filepath = buf.str().c_str();
if (entry->d_type == DT_DIR)
emptyFolder(filepath);
remove(filepath)
}
closedir(folder);
}
}
答案 0 :(得分:1)
正如n.m所说,你需要复制buf.str()的内容,否则你可以将引用直接传递给函数:
选项1:
std::string filepath(buf.str());
if (entry->d_type == DT_DIR)
emptyFolder(filepath.c_str());
remove(filepath.c_str())
选项2:
if (entry->d_type == DT_DIR)
emptyFolder(buf.str().c_str());
remove(buf.str().c_str())
我还建议您使用std::string
而不是const char*
的引用。在需要使用不支持字符串对象的API的地方直接使用c_str()
,并避免缓存它们(如选项2中所示)。