Я пытаюсь написать функцию с именем myremoved. Я хочу, чтобы он удалил непустую папку.
Но теперь у меня проблема, когда я использую функцию (код ниже) для удаления всех файлов и папки, «rmdir» говорит, что папка удалена, но когда я открываю Проводник Windows. Я видел, что папки, которые были удалены, все еще существуют (я пытаюсь получить доступ, но мне отказывают).
Это код функции "myremove":
int myremove(char *dirname){
/*
myremove(Folder name):Remove all files and folders in that.
*/
DIR *folder;
struct _finddata_t c_file;
char str[256];
long hasfile;
int a,result=0;
_chdir(dirname);
hasfile =_findfirst("*",&c_file);
if(hasfile!=-1){
do{
str[0]='\0';
strcat(str,c_file.name);
if((strcmp(str,".")!=0)&&(strcmp(str,"..")!=0)) {
//Is it a folder or not
if ((folder = opendir(c_file.name)) == NULL) {
//Not a folder,using remove to delete it
if((a=remove(c_file.name))==0){
printf("Remove: %s OK.\n",c_file.name);
}else{
result=-1;
printf("Remove: %s Failed.\n",c_file.name);
}
}else{
closedir(folder);
if((a=myremove(c_file.name))!=0){result=-1;}
}
}
}while( _findnext( hasfile, &c_file )==0 );
}
_chdir("..");
if ((folder = opendir(dirname)) != NULL){
if((a=rmdir(dirname))!=0){
result=-1;
printf("Remove: %s Failed.\n",c_file.name);
}else{
printf("Remove: %s OK.\n",c_file.name);
}
}
return result;
}
int main()
{
char dirname[256],ch;
printf("Please enter the folder name which you want to remove:");
gets(dirname);
if (strlen(dirname)!=0){
printf("Notice:It will remove %s folder and all things in this folder,sure to continue[Y/N]?",dirname);
scanf("%c",&ch);
if(ch=='Y'){
if (myremove(dirname)==0){
printf("Folder %s Removed.\n",dirname);
}else{
if (rmdir(dirname)==0){
printf("Folder %s Removed.\n",dirname);
}else{
printf("Folder %s couldn't be removed.\n",dirname);
}
}
}else if (ch=='N'){
printf("User cancel, program will exit.\n");
}
}else{
printf("Nothing input,program will exit.\n");
}
system("pause");
return 0;
}
opendir
? Я думаю, что это ненужно. Кроме того, если вы удалите его, это может решить вашу проблему. - person anatolyg   schedule 10.05.2014if ((folder = opendir(c_file.name)) == NULL)
. В истинной ветке вы никогда не закрываете каталог, открытый с помощью opendir. Кроме того, оператор if не является хорошим способом узнать, является ли файл каталогом или нет.opendir
потерпит неудачу по многим причинам, неудача из-за того, что имя файла, которое вы ему даете, на самом деле является каталогом, - это только одна возможность - person Brandin   schedule 10.05.2014