Проверка наличия файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго всем времени суток. У меня возникла следующая проблема. Создаю программу "Простейшая база данных". Мне нужна проверка наличия файла. Т.е. ввожу название файла, например, "file_name=text". В случае отсутствия такого файла мне выдается ошибка о том, что stream != NULL и работа программы прекращается, чего мне не нужно. Как сделать так, чтобы программа не вылетала? Прилагаю необходимый кусок программы:
 puts ("Введите имя файла, с которым вы хотите работать.");
    fflush (stdin);
    gets (file_name);
    strcat (file_name, ".txt");
    x=strlen (file_name);
    file_name[x]='\0';
    input=fopen (file_name, "r");
    if (!input) {puts ("Файл обнаружен. Работа возможна."); *vib=1;}    
    else 
        {puts ("Файл с таким названием не обнаружен. Если вы знаете, что такой файл существует, проверьте правильность написания.");
        puts ("Иначе создастся файл с таким названием.");   
        }
    fclose (input);

Решение задачи: «Проверка наличия файла»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
#define SIZE 1024
#define ERR_OPEN_FILE 1
 
int main(void)
{
    char file_name[SIZE];
    FILE *fp;
 
    setlocale(LC_ALL, "Rus");
 
    printf("введите имя файла: ");
    gets(file_name);
 
    fp = fopen(file_name, "rb+");
 
    if(!fp){ 
        puts("Файл не обнаружен. Будет создан файл с указанным именем");
        if(!(fp = fopen(file_name,"wb+")))
            exit(ERR_OPEN_FILE);
    }else
        puts("Файл существует и успешно открыт");
    
    fclose(fp);
 
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и строками.
  2. Определение размера буфера и кода ошибки при открытии файла.
  3. Инициализация пустой переменной типа char для хранения имени файла.
  4. Создание указателя на файловый дескриптор.
  5. Установка локали на русскую, чтобы работать с русскими символами.
  6. Вывод сообщения с просьбой ввести имя файла.
  7. Считывание имени файла с помощью функции gets(file_name).
  8. Попытка открыть файл с помощью функции fopen(file_name, rb+).
  9. Проверка на успешное открытие файла. Если файл не найден, выводится сообщение об этом и производится попытка создать новый файл с помощью функции fopen(file_name,wb+).
  10. Если файл успешно открыт, выводится соответствующее сообщение.
  11. Закрытие файлового дескриптора с помощью функции fclose(fp).
  12. Возврат 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы