取消链接不删除文件

时间:2017-04-08 00:05:03

标签: c++ c++11 recursion unlink

尝试在下面的代码中理解为什么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编辑而不是删除,虽然两者都不起作用...

1 个答案:

答案 0 :(得分:0)

您已声明路径变量,但实际上并未将任何内容复制到该变量中。这是一个问题。此外,当然您应该检查unlink的返回值,如果小于零,请检查errno以确定错误的确切性质。 (通常没有此类文件的权限。)