尝试在下面的代码中理解为什么unlink无法正常工作(不删除文件)。我唯一可以想象的是程序认为我仍然在与文件进行交互,所以它实际上并没有取消链接,因为它仍在使用中。代码是“rm”
的副本void directorySearch(const char *dName)
{
DIR *dir;
struct dirent *ent;
if ((dir = opendir (dName)) != NULL)
{
while ((ent = readdir (dir)) != NULL)
{
if ( ent->d_type!=DT_DIR)
{
//Where the crazy happens
printf ("%s\n", ent->d_name);
char path[PATH_MAX];
const char * d_name = ent->d_name;
unlink(path);
}
if ( ent->d_type==DT_DIR && strcmp(ent->d_name, ".")!= 0 && strcmp(ent->d_name, "..") != 0)
{
int path_length;
char path[PATH_MAX];
const char * d_name = ent->d_name;
path_length = snprintf (path, PATH_MAX, "%s/%s", dName, d_name);
directorySearch(path);
}
}
closedir (dir);
}
else
{
cout << "error with "<< dName<< endl;
}
}
使用unlink编辑而不是删除,虽然两者都不起作用...
答案 0 :(得分:0)
您已声明路径变量,但实际上并未将任何内容复制到该变量中。这是一个问题。此外,当然您应该检查unlink的返回值,如果小于零,请检查errno以确定错误的确切性质。 (通常没有此类文件的权限。)