funkcje <experimental/filesystem>

Ważna

Nagłówek <experimental/filesystem> i std::experimental::filesystem przestrzeń nazw dostarczyły wstępnie standardowej implementacji specyfikacji technicznej systemu plików (TS). Ta dokumentacja jest przechowywana dla kodu napisanego w oryginalnej implementacji systemu plików MSVC, która została usunięta, począwszy od wersji 14.51 MSVC. W przypadku nowego kodu użyj nagłówka std::filesystem języka C++17 <filesystem> i przestrzeni nazw. Aby uzyskać standardowe odpowiedniki tych funkcji, zobacz <filesystem> funkcje.

Te bezpłatne funkcje w nagłówku <experimental/filesystem> wykonują operacje modyfikowania i wykonywania zapytań na ścieżkach, plikach, linkach, katalogach i woluminach. Aby uzyskać więcej informacji i przykłady kodu, zobacz Nawigacja systemu plików (C++).

Wymagania

Nagłówek:<experimental/filesystem>

Przestrzeń nazw: std::experimental::filesystem

absolute

path absolute(const path& pval, const path& base = current_path());

Funkcja zwraca bezwzględną nazwę ścieżki odpowiadającą pval wartości względem nazwy pathname base:

  1. Jeśli pval.has_root_name() && pval.has_root_directory() funkcja zwróci pvalwartość .

  2. Jeśli pval.has_root_name() && !pval.has_root_directory() funkcja zwróciabsolute(base).relative_path() / pval.relative_path()pval.root_name()absolute(base).root_directory() / / wartość .

  3. Jeśli !pval.has_root_name() && pval.has_root_directory() funkcja zwróci absolute(base).root_name() / pvalwartość .

  4. Jeśli !pval.has_root_name() && !pval.has_root_directory() funkcja zwróci absolute(base) / pvalwartość .

begin

const directory_iterator& begin(const directory_iterator& iter) noexcept;
const recursive_directory_iterator&
    begin(const recursive_directory_iterator& iter) noexcept;

Obie funkcje zwracają wartość iter.

canonical

path canonical(const path& pval, const path& base = current_path());
path canonical(const path& pval, error_code& ec);
path canonical(const path& pval, const path& base, error_code& ec);

Wszystkie funkcje tworzą bezwzględną nazwę pabs = absolute(pval, base) ścieżki (lub pabs = absolute(pval) przeciążenie bez parametru podstawowego), a następnie zmniejsz je do postaci kanonicznej w następującej sekwencji kroków:

  1. Zastąp każdy składnik X ścieżki, dla którego is_symlink(X) element ma true wartość read_symlink(X).

  2. Usuń każdy składnik . ścieżki (kropka to bieżący katalog ustanowiony przez poprzednie składniki ścieżki).

  3. Usuń każdą parę składników X/.. ścieżki (dot-dot to katalog nadrzędny ustanowiony przez poprzednie składniki ścieżki).

Następnie funkcja zwraca wartość pabs.

copy

void copy(const path& from, const path& to);
void copy(const path& from, const path& to, error_code& ec) noexcept;
void copy(const path& from, const path& to, copy_options opts);
void copy(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;

Wszystkie funkcje mogą kopiować to lub łączyć co najmniej jeden plik pod from kontrolą optselementu , który jest traktowany jako copy_options::none przeciążenia bez opts parametru. opts zawiera co najwyżej jedną z:

  • skip_existing, overwrite_existing lub update_existing

  • copy_symlinks lub skip_symlinks

  • directories_only, create_symlinks lub create_hard_links

Funkcje najpierw określają file_status wartości f i fromt dla to. Są one używane symlink_status , gdy opts zawiera copy_options::create_symlinks, copy_options::skip_symlinkslub copy_options::copy_symlinks, zgodnie z wymaganiami dla źródła lub miejsca docelowego. W przeciwnym razie używają elementu status.

Jeśli !exists(f) || equivalent(f, t) || is_other(f) || is_other(t) || is_directory(f)&& is_regular_file(t)funkcja zgłasza błąd i zatrzymuje. W przeciwnym razie, jeśli is_symlink(f), to:

  • Jeśli options & copy_options::skip_symlinks, nie rób nic.

  • W przeciwnym razie, jeśli !exists(t) && options & copy_options::copy_symlinks, to copy_symlink(from, to).

  • W przeciwnym razie zgłoś błąd.

W przeciwnym razie, jeśli is_regular_file(f), to:

  • Jeśli opts & copy_options::directories_only, nie rób nic.

  • W przeciwnym razie, jeśli opts & copy_options::create_symlinks, to create_symlink(from, to).

  • W przeciwnym razie, jeśli opts & copy_options::create_hard_links, to create_hard_link(from, to).

  • W przeciwnym razie, jeśli is_directory(t), to copy_file(from, to / from.filename(), opts).

  • W przeciwnym razie copy_file(from, to, opts).

W przeciwnym razie, jeśli is_directory(f) && (opts & copy_options::recursive || !opts), to:

if (!exists(t))
{  // copy directory contents recursively
    create_directory(to, from, ec);

    for (directory_iterator next(from), end; ec == error_code() && next != end; ++next)
    {
        copy(next->path(), to / next->path().filename(), opts, ec);
    }
}

W przeciwnym razie nic nie rób.

copy_file

bool copy_file(const path& from, const path& to);
bool copy_file(const path& from, const path& to, error_code& ec) noexcept;
bool copy_file(const path& from, const path& to, copy_options opts);
bool copy_file(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;

Wszystkie funkcje mogą kopiować to plik pod from kontrolą opts, który jest traktowany jako copy_options::none przeciążenia bez opts parametru. opts zawiera co najwyżej jedną z skip_existingwartości , overwrite_existinglub update_existing.

Jeśli exists(to) && !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options::update_existing))wartość , zgłoś jako błąd, że plik już istnieje.

W przeciwnym razie, jeśli !exists(to) || opts & copy_options::overwrite_existing || opts & copy_options::update_existing&& last_write_time(to) < last_write_time(from) || !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options::update_existing)), spróbuj skopiować zawartość i atrybuty pliku do pliku fromto. Zgłoś błąd, jeśli próba kopiowania nie powiedzie się.

Funkcje są zwracane true , jeśli kopia zakończyła się pomyślnie, i false w przeciwnym razie.

void copy_symlink(const path& from, const path& to);
void copy_symlink(const path& from, const path& to, error_code& ec) noexcept;

Jeśli is_directory(from)funkcja wywołuje funkcję create_directory_symlink(from, to). W przeciwnym razie wywołuje metodę create_symlink(from, to).

create_directories

bool create_directories(const path& pval);
bool create_directories(const path& pval, error_code& ec) noexcept;

W przypadku nazwy ścieżki, takiej jak a\/b\/c, funkcja tworzy katalogi i a\/b zgodnie z potrzebamia, aby mógł utworzyć katalog a\/b\/c. Zwraca tylko true wtedy, gdy faktycznie tworzy katalog pval.

create_directory

bool create_directory(const path& pval);

bool create_directory(const path& pval, error_code& ec) noexcept;
bool create_directory(const path& pval, const path& attr);
bool create_directory(const path& pval, const path& attr, error_code& ec) noexcept;

Funkcja tworzy katalog pval zgodnie z potrzebami. Zwraca tylko true wtedy, gdy faktycznie tworzy katalog pval. Jeśli określisz attr parametr, funkcja kopiuje uprawnienia z istniejącego pliku. Jeśli nie określisz parametru attr , funkcja używa funkcji perms::all.

void create_directory_symlink(const path& to, const path& link);
void create_directory_symlink(const path& to, const path& link, error_code& ec) noexcept;

Funkcja tworzy link jako symlink do katalogu to.

void create_hard_link(const path& to,  const path& link);
void create_hard_link(const path& to, const path& link, error_code& ec) noexcept;

Funkcja tworzy link jako twardy link do katalogu lub pliku to.

void create_symlink(const path& to, const path& link);

void create_symlink(const path& to, const path& link, error_code& ec) noexcept;

Funkcja tworzy link jako symlink do pliku to.

current_path

path current_path();
path current_path(error_code& ec);
void current_path(const path& pval);
void current_path(const path& pval, error_code& ec) noexcept;

Funkcje bez parametru pval zwracają nazwę ścieżki dla bieżącego katalogu. Pozostałe funkcje ustawiają bieżący katalog na pvalwartość .

end

directory_iterator end(const directory_iterator&) noexcept;
recursive_directory_iterator end(const recursive_directory_iterator&) noexcept;

Pierwsza funkcja zwraca directory_iterator() wartość , a druga funkcja zwraca wartość recursive_directory_iterator().

equivalent

bool equivalent(const path& left, const path& right);
bool equivalent(const path& left, const path& right, error_code& ec) noexcept;

Funkcje zwracają true tylko wtedy, gdy lewa i prawa odwołują się do tej samej jednostki systemu plików.

exists

bool exists(file_status stat) noexcept;
bool exists(const path& pval);
bool exists(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość status_known(stat) && stat.type() != file_type::not_found. Drugie i trzecie funkcje zwracają wartość exists(status(pval)).

file_size

uintmax_t file_size(const path& pval);
uintmax_t file_size(const path& pval, error_code& ec) noexcept;

Funkcje zwracają rozmiar w bajtach pliku wybranego przez pval, jeśli exists(pval) && is_regular_file(pval) i rozmiar pliku można określić. W przeciwnym razie zgłaszają błąd i zwracają wartość uintmax_t(-1).

uintmax_t hard_link_count(const path& pval);
uintmax_t hard_link_count(const path& pval, error_code& ec) noexcept;

Funkcja zwraca liczbę twardych łączy dla pval, lub -1, jeśli wystąpi błąd.

hash_value

size_t hash_value(const path& pval) noexcept;

Funkcja zwraca wartość skrótu dla pval.native()elementu .

is_block_file

bool is_block_file(file_status stat) noexcept;
bool is_block_file(const path& pval);
bool is_block_file(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość stat.type() == file_type::block. Pozostałe funkcje zwracają wartość is_block_file(status(pval)).

is_character_file

bool is_character_file(file_status stat) noexcept;
bool is_character_file(const path& pval);
bool is_character_file(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość stat.type() == file_type::character. Pozostałe funkcje zwracają wartość is_character_file(status(pval)).

is_directory

bool is_directory(file_status stat) noexcept;
bool is_directory(const path& pval);
bool is_directory(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość stat.type() == file_type::directory. Pozostałe funkcje zwracają wartość is_directory(status(pval)).

is_empty

bool is_empty(const path& pval);
bool is_empty(const path& pval, error_code& ec) noexcept;

Jeśli is_directory(pval)funkcja zwraca directory_iterator(pval) == directory_iterator()wartość . W przeciwnym razie zwraca wartość file_size(pval) == 0.

is_fifo

bool is_fifo(file_status stat) noexcept;
bool is_fifo(const path& pval);
bool is_fifo(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość stat.type() == file_type::fifo. Pozostałe funkcje zwracają wartość is_fifo(status(pval)).

is_other

bool is_other(file_status stat) noexcept;
bool is_other(const path& pval);
bool is_other(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość exists(stat) && !is_regular_file(stat) && !is_directory(stat) && !is_symlink(stat). Pozostałe funkcje zwracają wartość is_other(status(pval)).

is_regular_file

bool is_regular_file(file_status stat) noexcept;
bool is_regular_file(const path& pval);
bool is_regular_file(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość stat.type() == file_type::regular. Pozostałe funkcje zwracają wartość is_regular_file(status(pval)).

is_socket

bool is_socket(file_status stat) noexcept;
bool is_socket(const path& pval);
bool is_socket(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość stat.type() == file_type::socket. Pozostałe funkcje zwracają wartość is_socket(status(pval)).

bool is_symlink(file_status stat) noexcept;
bool is_symlink(const path& pval);
bool is_symlink(const path& pval, error_code& ec) noexcept;

Pierwsza funkcja zwraca wartość stat.type() == file_type::symlink. Pozostałe funkcje zwracają wartość is_symlink(status(pval)).

last_write_time

file_time_type last_write_time(const path& pval);
file_time_type last_write_time(const path& pval, error_code& ec) noexcept;
void last_write_time(const path& pval, file_time_type new_time);
void last_write_time(const path& pval, file_time_type new_time, error_code& ec) noexcept;

Pierwsze dwie funkcje zwracają czas ostatniej modyfikacji danych dla pvalelementu lub file_time_type(-1) , jeśli wystąpi błąd. Ostatnie dwie funkcje ustawiają czas ostatniej modyfikacji danych na pval wartość new_time.

permissions

void permissions(const path& pval, perms mask);
void permissions(const path& pval, perms mask, error_code& ec) noexcept;

Funkcje ustawiają uprawnienia dla nazwy pathname wybranej przez pval do mask & perms::mask kontroli nad elementem perms & (perms::add_perms | perms::remove_perms). mask zawiera co najwyżej jeden z elementów perms::add_perms i perms::remove_perms.

Jeśli mask & perms::add_permsfunkcja ustawi uprawnienia na status(pval).permissions() | mask & perms::maskwartość . W przeciwnym razie jeśli mask & perms::remove_permsfunkcje ustawią uprawnienia na status(pval).permissions() & ~(mask & perms::mask)wartość . W przeciwnym razie funkcje ustawiają uprawnienia na mask & perms::mask.

path read_symlink(const path& pval);
path read_symlink(const path& pval, error_code& ec);

Funkcje zgłaszają błąd i zwracają path() wartość , jeśli !is_symlink(pval). W przeciwnym razie funkcje zwracają obiekt typu path zawierającego łącze symboliczne.

remove

bool remove(const path& pval);
bool remove(const path& pval, error_code& ec) noexcept;

Funkcje zwracają true tylko wtedy, gdy exists(symlink_status(pval)) plik zostanie pomyślnie usunięty. Sam symlink jest usuwany, a nie wybrany plik.

remove_all

uintmax_t remove_all(const path& pval);
uintmax_t remove_all(const path& pval, error_code& ec) noexcept;

Jeśli pval jest katalogiem, funkcje rekursywnie usuwają wszystkie wpisy katalogu, a następnie sam wpis. W przeciwnym razie funkcje wywołają metodę remove. Zwracają one liczbę wszystkich elementów pomyślnie usuniętych.

rename

void rename(const path& from, const path& to);
void rename(const path& from, const path& to, error_code& ec) noexcept;

Nazwa funkcji zmieni się from na to. Sama nazwa łącza symlinku jest zmieniana, a nie wybrany plik.

resize_file

void resize_file(const path& pval, uintmax_t size);
void resize_file(const path& pval, uintmax_t size, error_code& ec) noexcept;

Funkcje zmieniają rozmiar pliku, tak aby file_size(pval) == size.

space

space_info space(const path& pval);
space_info space(const path& pval, error_code& ec) noexcept;

Funkcja zwraca informacje o woluminie wybranym przez pvalelement w strukturze typu space_info. Struktura zawiera uintmax_t(-1) dowolną wartość, która nie może być określona.

status

file_status status(const path& pval);
file_status status(const path& pval, error_code& ec) noexcept;

Funkcje zwracają stan pathname, typ pliku i uprawnienia skojarzone z elementem pval. Sam symlink nie jest testowany, ale wybrany plik.

status_known

bool status_known(file_status stat) noexcept;

Funkcja zwraca stat.type() != file_type::none

swap

void swap(path& left, path& right) noexcept;

Funkcja wymienia zawartość lewej i prawej.

file_status symlink_status(const path& pval);
file_status symlink_status(const path& pval, error_code& ec) noexcept;

Funkcje zwracają stan symlinku pathname, typ pliku i uprawnienia skojarzone z pval. Funkcje zachowują się tak samo, jak status(pval) z tą różnicą, że sam link jest testowany, a nie wybrany plik.

system_complete

Uwaga / Notatka

Język C++17 std::filesystem nie zapewnia system_complete. W przypadku bieżącego kodu użyj std::filesystem::absolute polecenia , gdy zapewnia wymagane zachowanie.

path system_complete(const path& pval);
path system_complete(const path& pval, error_code& ec);

Funkcje zwracają bezwzględną nazwę ścieżki, która uwzględnia, w razie potrzeby, bieżący katalog skojarzony z jego nazwą główną. W przypadku systemu POSIX funkcje zwracają wartość absolute(pval).

temp_directory_path

path temp_directory_path();
path temp_directory_path(error_code& ec);

Funkcje zwracają nazwę ścieżki dla katalogu odpowiedniego do przechowywania plików tymczasowych.

u8path

template <class Source>
path u8path(const Source& source);

template <class InIt>
path u8path(InIt first, InIt last);

Pierwsza funkcja zachowuje się tak samo jak path(source) i druga funkcja zachowuje się tak samo, jak path(first, last) to, że wybrane źródło w każdym przypadku jest traktowane jako sekwencja elementów char zakodowanych jako UTF-8, niezależnie od systemu plików.

Zobacz także

<experimental/filesystem>
<experimental/filesystem> wyliczenia
<experimental/filesystem> operatory