Как проверить существование файла или каталога в C++?

Опубликовано: 4 Января, 2023

Проверка наличия каталога или файла — одна из наиболее распространенных операций, выполняемых файловой системой в операционной системе. Большинство языков программирования предлагают некоторый уровень доступности файловой системы в виде библиотечных функций. В этой статье вы узнаете, как протестировать файл или каталог, существующий в C++.

Note: stat function present in the sys/stat.h header file would be used in the program. The function is not a part of the C++ standard library.

Проверка/тестирование наличия каталога

stat — это предопределенная функция, представленная в заголовочном файле sys/stat.h . Функция принимает путь и структуру в качестве аргументов, в которых будут храниться метаданные, связанные с файлом/каталогом, если они присутствуют. Функция возвращает значение 0, если путь правильный. Для демонстрации мы будем тестировать наличие следующего каталога:

Пример:

C++




// C++ Program to test presence of file/Directory
#include <iostream>
#include <sys/stat.h>
using namespace std;
  
int main()
{
    // Path to the directory
    const char* dir = "C:Usersapples";
  
    // Structure which would store the metadata
    struct stat sb;
  
    // Calls the function with path as argument
    // If the file/directory exists at the path returns 0
    // If block executes if path exists
    if (stat(folder, &sb) == 0)
        cout << "The path is valid!";
    else
        cout << "The Path is invalid!";
  
    return 0;
}

Выход:

The path is valid!

Объяснение: Во-первых, путь к каталогу хранится в переменной указателя dir . Затем пустая структура инициализируется форматом, присутствующим в заголовочном файле статистики. Это будет хранить метаданные. Затем внутри условия if, где выполняется вызов функции stat . Если путь действителен, т. е. файл/каталог существует, то вывод будет равен 0, в противном случае он будет ненулевым. Следовательно, если условие будет истинным, если путь действителен, в противном случае будет выполнен блок else, отображающий недопустимый путь! сообщение.

Проверка/тестирование наличия файла

Вышеупомянутый процесс также можно использовать для определения наличия файла внутри каталога. С некоторыми незначительными изменениями в предыдущем коде также можно проверить наличие файлов. Следовательно, в этом примере будет предпринята попытка обнаружить следующий файл

Пример:

Выход:

The path is valid!

Объяснение: Во-первых, путь к файлу хранится в переменной указателя файла . Затем пустая структура инициализируется форматом, присутствующим в заголовочном файле статистики . Это будет хранить метаданные. Затем внутри условия if, где выполняется вызов функции stat . Если путь действителен, т. е. файл существует, то вывод будет равен 0, в противном случае он будет ненулевым. Затем мы проверяем, ведет ли путь к каталогу, используя флаг S_IFDIR . Если это так, то путь действителен, но относится к каталогу, иначе это путь к файлу.

Note: The process for determining path to a file works on Windows and Linux Distributions.