Проблема с использованием функции remove (..) из stdio.h C

#c #stdio

#c #stdio

Вопрос:

Здравствуйте, мой вопрос заключается в том, почему следующей функции не удается удалить файл, имя которого указано в dir1; Я использую функцию remove, но, похоже, с ней какая-то проблема. Пожалуйста, помогите мне.

 #include <stdio.h>
void test(char* dir1,char* dir2)
{

    FILE * file1,* file2;
    file1=fopen(dir1,"r");
    file2=fopen(dir2,"w");
    if(!file1){ return;}
    int inpch;
    char* string = new char[10];
    string[9]='';
    int br=0;

    do
    {   

        while((inpch=fgetc(file1))!=EOF)
        {
            string[br]=char(inpch);
            br  ;
            if(br==9)break;
        }


        if(br!=9)
        {
            string[br]='';
            fputs(string,file2);


            return;
        }
        else
        {   
            fputs(string,file2);
            br=0;

        }


    }while(true);

    fclose(file1);
    remove(dir1);/// I DON"T UNDERSTAND WHY IT DOESN"T DELETE THE FILE.
    fclose(file2);
}
  

Комментарии:

1. Есть ли у вас (скорее, есть ли у программы) соответствующие разрешения на удаление файла?

2. @Michael: Существует около 14 случаев ошибок для unlink и 13 для rmdir системных вызовов, которые remove вызываются. Мы собираемся 17 раз спрашивать OP о его уверенности в том или ином случае? 🙂

Ответ №1:

Я предполагаю, что в какой-то момент перед выходом из do-while цикла следующее if условие становится истинным, и функция возвращается до того, как достигнет конца функции, даже без вызова remove функции.

     if(br!=9)
    {
        string[br]='';
        fputs(string,file2);
        return; //<------------ here you're returning!
    }
  

Вы хотели написать return или break ? Похоже, именно в этом и заключается проблема.

Комментарии:

1. У тебя проницательный взгляд, чувак. Он должен прерваться на 9-м байте, хотя, если ему повезет 🙂

Ответ №2:

Почему бы вам не проверить возвращаемое значение и код ошибки (errno), которые точно сообщают вам, почему функция не удалась?

Ответ №3:

Замените свой remove вызов этим :

 if( remove( "myfile.txt" ) != 0 )
    perror( "Error deleting file" );
  else
    puts( "File successfully deleted" );
  

и это должно рассказать вам, что произошло.