内存访问冲突 readdir
Memory Access Violation readdir
你好我必须用 c (linux) 函数来从目录中删除所有文件我不能使用删除函数或 execl 只能取消链接和 rmdir。
我用过 readdir :
int removefile( char *file)
{
struct dirent * entry;
DIR *dir;
char *p;
char *d;
char *tmp;
dir = opendir(file);
errno =0;
strcpy( d, file );//kopiowanie file do p
strcat( d, "/" );//dodawanie /
strcpy(tmp,d);//kopiowanie d do tmp
strcpy(p,d); //kopiowanie d do p
while((entry=readdir(dir)) !=NULL)
{
if(entry->d_type==DT_REG)
{
strcat(d,entry->d_name);
int a=unlink(d);
strcpy(d,tmp);
}
else if(entry->d_type==DT_DIR)
{
strcat(p,entry->d_name);
int b=removefile(p);
int c=rmdir(p);
strcpy(p,tmp);
}
}
closedir(dir);
return 0;
}
但我得到了内存访问冲突
谢谢
您没有为字符串分配内存。
要在 c 中“创建”一个字符串,您需要请求一些存储空间来放入它,您可以通过定义如下数组来实现
char string[SIZE];
其中 SIZE
是一个相当大的数字。
这也许是你想要的,但你仍然需要到处检查错误
int removefile(const char *const dirpath)
{
struct dirent *entry;
DIR *dir;
dir = opendir(dirpath);
if (dir == NULL)
return -1;
while ((entry = readdir(dir)) != NULL) {
char path[256];
// Build the path string
snprintf(path, sizeof(path), "%s/%s", dirpath, entry->d_name);
if (entry->d_type == DT_REG) {
unlink(path);
} else if (entry->d_type == DT_DIR) {
// Recurse into the directory
removefile(path);
// Remove the directory
rmdir(path);
}
}
closedir(dir);
return 0
}
注意:阅读snprintf()
的文档,同时阅读关于c-strings的简单而完整的教程。
你好我必须用 c (linux) 函数来从目录中删除所有文件我不能使用删除函数或 execl 只能取消链接和 rmdir。
我用过 readdir :
int removefile( char *file)
{
struct dirent * entry;
DIR *dir;
char *p;
char *d;
char *tmp;
dir = opendir(file);
errno =0;
strcpy( d, file );//kopiowanie file do p
strcat( d, "/" );//dodawanie /
strcpy(tmp,d);//kopiowanie d do tmp
strcpy(p,d); //kopiowanie d do p
while((entry=readdir(dir)) !=NULL)
{
if(entry->d_type==DT_REG)
{
strcat(d,entry->d_name);
int a=unlink(d);
strcpy(d,tmp);
}
else if(entry->d_type==DT_DIR)
{
strcat(p,entry->d_name);
int b=removefile(p);
int c=rmdir(p);
strcpy(p,tmp);
}
}
closedir(dir);
return 0;
}
但我得到了内存访问冲突 谢谢
您没有为字符串分配内存。
要在 c 中“创建”一个字符串,您需要请求一些存储空间来放入它,您可以通过定义如下数组来实现
char string[SIZE];
其中 SIZE
是一个相当大的数字。
这也许是你想要的,但你仍然需要到处检查错误
int removefile(const char *const dirpath)
{
struct dirent *entry;
DIR *dir;
dir = opendir(dirpath);
if (dir == NULL)
return -1;
while ((entry = readdir(dir)) != NULL) {
char path[256];
// Build the path string
snprintf(path, sizeof(path), "%s/%s", dirpath, entry->d_name);
if (entry->d_type == DT_REG) {
unlink(path);
} else if (entry->d_type == DT_DIR) {
// Recurse into the directory
removefile(path);
// Remove the directory
rmdir(path);
}
}
closedir(dir);
return 0
}
注意:阅读snprintf()
的文档,同时阅读关于c-strings的简单而完整的教程。