取消链接不删除文件
Unlink Not Removing File
试图在下面的代码中了解为什么取消链接不起作用(不删除文件)。我唯一能想象的是程序认为我仍在与文件交互,所以它实际上并没有取消链接,因为它仍在使用中。该代码是 "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 的 return 值,如果小于零,则检查 errno 以确定错误的确切性质。 (通常没有此类文件的权限。)
试图在下面的代码中了解为什么取消链接不起作用(不删除文件)。我唯一能想象的是程序认为我仍在与文件交互,所以它实际上并没有取消链接,因为它仍在使用中。该代码是 "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 的 return 值,如果小于零,则检查 errno 以确定错误的确切性质。 (通常没有此类文件的权限。)