Класс file_status
Класс file_status из библиотеки <filesystem>
представляет собой контейнер для хранения информации о типе
файла и его правах доступа. Объекты этого класса возвращаются
такими функциями, как status и symlink_status.
Тип файла хранится в виде значения перечисления
file_type, а права доступа - в виде битовой маски
типа perms. Класс не хранит имя файла и не выполняет
операций ввода-вывода - он лишь переносит уже полученный
результат проверки.
Синтаксис
#include <filesystem>
class file_status;
// конструкторы
file_status() noexcept;
explicit file_status(file_type type) noexcept;
file_status(file_type type, perms permissions) noexcept;
// методы
file_type type() const noexcept;
void type(file_type type) noexcept;
perms permissions() const noexcept;
void permissions(perms permissions) noexcept;
Пример
Давайте получим статус обычного файла и выведем его тип:
#include <iostream>
#include <filesystem>
#include <fstream>
using namespace std;
namespace fs = std::filesystem;
int main()
{
ofstream("test.txt") << "data";
fs::file_status st = fs::status("test.txt");
if (st.type() == fs::file_type::regular) {
cout << "regular file" << endl;
}
fs::remove("test.txt");
return 0;
}
Результат выполнения кода:
"regular file"
Пример
Давайте создадим объект file_status вручную
и проверим его тип и права доступа:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::file_status st(fs::file_type::directory,
fs::perms::owner_read | fs::perms::owner_write);
cout << (st.type() == fs::file_type::directory) << endl;
fs::perms p = st.permissions();
cout << ((p & fs::perms::owner_write) != fs::perms::none) << endl;
return 0;
}
Результат выполнения кода:
1
1
Пример
Давайте проверим, что путь "/no/such/file"
не существует, сравнив тип статуса с file_type::not_found:
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
int main()
{
fs::file_status st = fs::status("/no/such/file");
if (st.type() == fs::file_type::not_found) {
cout << "not found" << endl;
}
return 0;
}
Результат выполнения кода:
"not found"
Смотрите также
-
класс
path,
который представляет путь к файлу -
функция
exists,
которая проверяет существование файла -
функция
is_regular_file,
которая проверяет, что путь указывает на обычный файл -
функция
is_directory,
которая проверяет, что путь указывает на каталог