Я пишу программу, которая запрашивает у пользователя имя файла и создает его, если он не существует.В конце программы я хочу проверить, пуста ли созданная программа, и, если она есть, удалить ее.Не удаляя его, а затем запуская программу с тем же именем файла, портит способ обнаружения ввода.
Я пытался использовать rewind()
, чтобы вернуться в начало, а затем проверять feof()
, чтобы увидетьесли в начале файла был символ EOF, но это не сработало.
Затем я провел поиск в Интернете и нашел метод, который использовал fseek()
для перехода в конец файла,а затем с помощью ftell()
проверил, был ли конец файла в позиции 0, но опять-таки это не сработало.
Я вернулся и стал больше ковыряться, и обнаружил, что проблема может быть в том, что я не имелСначала я не использовал fclose()
, поэтому я снова попробовал два предыдущих решения, на этот раз обязательно закрыв файл перед попыткой его удаления.Все еще без игры в кости.
Я попытался проверить, на что было установлено значение errno
, и получил 2: No such file or directory
.Это явно неверно, так как если бы это было так, это означало бы, что я достиг своей цели, и когда я проверяю рабочий каталог, файл все еще там.
Я абсолютно не знаю, что попробоватьследующий.Кто-нибудь может указать мне правильное направление?
Вот способы, которыми я пытался удалить файл (fp
- это указатель файла, а file
- это указатель на символ с именем файлаfp
указывает на.):
Попытка 1:
rewind(fp);
if(feof(fp)){
remove(file);
}
Попытка 2:
fseek(fp, 1, SEEK_END);
long size = ftell(fp);
if(size == 0){
remove(file);
}
Попытка 3:
fseek(fp, 1, SEEK_END);
long size = ftell(fp);
fclose(fp);
if(size == 0){
remove(file);
}
Попытка 4:
rewind(fp);
int empty = 0;
if(feof(fp)){
empty = 1;
}
fclose(fp);
if(empty == 1){
remove(file);
}
ОБНОВЛЕНИЕ: Вот пара MCVE, по одному для каждого метода.
#include <stdio.h>
#include <errno.h>
int main() {
FILE *fp;
char file[40];
scanf(" %[^\n]s", file);
fp = fopen(file, "r");
if(fp == NULL){
fp = fopen(file, "w");
int result;
rewind(fp);
int empty = 0;
if(feof(fp)){
empty = 1;
}
fclose(fp);
if(empty == 1){
result = remove(file);
}
printf("%d\n", result);
printf("%d\n", errno);
return 0;
}
Версия 2:
#include <stdio.h>
#include <errno.h>
int main() {
FILE *fp;
char file[40];
scanf(" %[^\n]s", file);
fp = fopen(file, "r");
if(fp == NULL){
fp = fopen(file, "w");
int result;
fseek(fp, 1, SEEK_END);
long size = ftell(fp);
fclose(fp);
if(size == 0){
result = remove(file);
}
printf("%d\n", result);
printf("%d\n", errno);
return 0;
}
ОБНОВЛЕНИЕ 2:
Я только что понял, что когда я делал MCVE, когда я их запускал, result
возвращал 0
, что должно означать, что он был успешным, но файл все еще былтам в каталоге.Я в недоумении для слов.