После закрытия указателя файл нельзя удалить с помощью команды system () и показать, что файл используется другой программой - PullRequest
0 голосов
/ 17 марта 2019

После fclose(fpointer) я пытаюсь удалить этот файл с помощью system("del text_file.txt");, но вывод говорит, что «процесс не может получить доступ к файлу, потому что он используется другим процессом».

Вот мой код:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

FILE * fpointer;

int main() {
    int times;
    char option;

    //Read the file
    if ((fpointer = fopen("file_open.txt", "r")) == NULL) //If this file dont exist
    {
        fpointer = fopen("file_open.txt", "w");//Create the file
        fprintf(fpointer, "0");
        fclose(fpointer);
        fpointer = fopen("file_open.txt", "r");//Reopen with reading mode
    }
    else
    {
        fpointer = fopen("file_open.txt", "r");
    }
    fscanf(fpointer, "%d", &times);//Save the number of note to variable
    fclose(fpointer);

    //Add 1 times when the program launch
    fpointer = fopen("file_open.txt", "w");
    times++;
    fprintf(fpointer, "%d", times);//Save current variable to file
    fclose(fpointer);

    printf("You have launch this program %d times!\n", times);
    printf("Do you want to reset the number?(Y/N)\n>>");
    scanf(" %c", &option);

    if (option == 'Y')
    {
        system("del file_open.txt");//delete the file
    }
    else
    {
        printf("\nThe program is exiting now...\n");
        _getch();//Press any key to exit
        exit(0);
    }

    return 0;
}

Примечание:

1) Предполагая, что ввод всегда корректен.

2) Я пытаюсь не заменять file_open.txt на 1

Можно ли удалить файл с помощью system("del text_file.txt")?

Редактировать: Исправлены некоторые ошибки.

Edit:

Я пытался использовать remove() в своем коде, эту часть я изменил:

if (option == 'Y')
    {
        int status;
        char file_name[] = "file_open.txt";
        status = remove(file_name);//delete the file
        if (status == 0)
        {
            printf("%s file deleted successfully.\n", file_name);
        }
        else
        {
            printf("Unable to delete the file\n");
            perror("Following error occurred");
        }
    }
    else
    {
        printf("\nThe program is exiting now...\n");
        _getch();//Press any key to exit
        exit(0);
    }

Проблема решена удалением fopen(fpointer), спасибо.

1 Ответ

0 голосов
/ 17 марта 2019

Блок else в:

//Read the file
if ((fpointer = fopen("file_open.txt", "r")) == NULL) //If this file dont exist
{
    ...
}
else
{
    fpointer = fopen("file_open.txt", "r");
}

Откроет файл во второй раз (или может не открыть его в некоторых случаях), но он заменит fpointer, поэтому вы больше не сможете закрыть первое открытие. Таким образом, вы открыли файл дважды, но закрыли только один, и потеряли дескриптор, необходимый для закрытия первого, перезаписав его. Блок else должен быть удален.

Кроме того, вам лучше использовать remove() для удаления файла. system() запустит весь сеанс командной оболочки только для выполнения задачи, поэтому это довольно тяжелое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...