#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" );
и это должно рассказать вам, что произошло.