filesystem
Dołącz nagłówek <filesystem>
umożliwiający dostęp do klas i funkcji, które manipulują ścieżkami, plikami i katalogami oraz pobierają informacje o nich.
Składnia
#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;
Ważne
W wydaniu programu Visual Studio 2017 <filesystem>
nagłówek nie był jeszcze standardem C++. Język C++ w programie Visual Studio 2017 RTW implementuje ostateczny standard roboczy, który znajduje się w standardzie ISO/IEC JTC 1/SC 22/WG 21 N4100. Program Visual Studio 2017 w wersji 15.7 lub nowszej obsługuje nowy standard C++17 <filesystem>
.
Jest to zupełnie nowa implementacja niezgodna z poprzednią std::experimental
wersją. Została ona wprowadzona przez obsługę linków symlinkowych, poprawki błędów i zmiany w standardowym wymaganym zachowaniu. W programie Visual Studio 2019 w wersji 16.3 lub nowszej, w tym <filesystem>
tylko nowe std::filesystem
. Uwzględnia <experimental/filesystem>
tylko starą experimental implementację. Implementacja experimental zostanie usunięta w następnej wersji bibliotek powodującej niezgodność z architekturą ABI.
Ten nagłówek obsługuje systemy plików dla jednej z dwóch szerokich klas systemów operacyjnych hosta: Microsoft Windows i POSIX.
Chociaż większość funkcji jest powszechna dla obu systemów operacyjnych, w tym dokumencie opisano, gdzie występują różnice. Na przykład:
System Windows obsługuje wiele nazw głównych, takich jak
c:
lub\\network_name
. System plików składa się z lasu drzew, każdy z własnym katalogiem głównym, takim jakc:\
lub\\network_name\
, i każdy z własnym bieżącym katalogiem, do ukończenia względnej nazwy ścieżki (takiej, która nie jest bezwzględną nazwą ścieżki).System POSIX obsługuje pojedyncze drzewo bez nazwy głównej, pojedynczego katalogu
/
głównego i pojedynczego bieżącego katalogu.
Inną znaczącą różnicą jest natywna reprezentacja nazw ścieżek:
System Windows używa sekwencji zakończonej wartości null typu , zakodowanej
wchar_t
jako UTF-16 (co najmniej jeden element dla każdego znaku).System POSIX używa sekwencji zakończonej wartości null klasy , zakodowanej
char
jako UTF-8 (co najmniej jeden element dla każdego znaku).Obiekt klasy
path
przechowuje ścieżkę w postaci natywnej, ale obsługuje łatwą konwersję między tym przechowywanym formularzem a kilkoma formularzami zewnętrznymi:Sekwencja o wartości null zakodowana
char
jako preferowana przez system operacyjny.Sekwencja z wartością null zakodowana
char
jako UTF-8.Sekwencja o wartości null zakodowana
wchar_t
jako preferowana przez system operacyjny.Zakończona wartość null sekwencja
char16_t
, zakodowana jako UTF-16.Zakończona wartość null sekwencja
char32_t
klasy , zakodowana jako UTF-32.
Interkonwersje między tymi reprezentacjami są w razie potrzeby pośredniczone przy użyciu co najmniej jednego
codecvt
aspektu. Jeśli nie określono określonego obiektu ustawień regionalnych, te aspekty są uzyskiwane z globalnych ustawień regionalnych.
Inną różnicą jest szczegóły, z którymi każdy system operacyjny umożliwia określenie uprawnień dostępu do plików lub katalogów:
System Windows rejestruje, czy plik jest tylko do odczytu, czy zapisywalny, atrybut, który nie ma znaczenia dla katalogów.
PoSIX rejestruje, czy plik może być odczytywany, zapisywany lub wykonywany (skanowany, jeśli katalog). Niezależnie od tego, czy każda operacja jest dozwolona dla właściciela, grupy właściciela, czy dla wszystkich, oraz kilku innych uprawnień.
Typowe dla obu systemów jest struktura nałożona na nazwę ścieżki po wklejeniu nazwy głównej. Dla ścieżki nazwa_ c:/abc/xyz/def.ext
ścieżki :
Nazwa główna to
c:
.Katalog główny to
/
.Ścieżka główna to
c:/
.Ścieżka względna to
abc/xyz/def.ext
.Ścieżka nadrzędna to
c:/abc/xyz
.Nazwa pliku to
def.ext
.Łodyga to
def
.Rozszerzenie to
.ext
.
Niewielka różnica jest preferowanym separatorem między sekwencją katalogów w ścieżce pathname. Oba systemy operacyjne umożliwiają napisanie ukośnika /
do przodu, ale w niektórych kontekstach system Windows preferuje ukośnik \
odwrotny. Implementacja przechowuje preferowany separator w elemencie członkowskim preferred_separator
danych w path
pliku .
Na koniec obiekty mają ważną funkcję: można ich używać wszędzie tam, path
gdzie argument nazwy pliku jest wymagany w klasach zdefiniowanych w nagłówku <fstream>
.
Aby uzyskać więcej informacji i przykładów kodu, zobacz Nawigacja po systemie plików (C++).
Elementy członkowskie
Klasy
Nazwa/nazwisko | opis |
---|---|
Klasa directory_entry |
Opisuje obiekt, który jest zwracany przez obiekt directory_iterator lub i recursive_directory_iterator zawiera path element . |
Klasa directory_iterator |
Opisuje iterator wejściowy, który sekwencjonuje nazwy plików w katalogu systemu plików. |
Klasa filesystem_error |
Klasa podstawowa dla wyjątków zgłaszanych w celu raportowania przepełnienia systemu niskiego poziomu. |
Klasa path |
Definiuje klasę, która przechowuje obiekt typu String szablonu, który jest odpowiedni do użycia jako nazwa pliku. |
Klasa recursive_directory_iterator |
Opisuje iterator wejściowy, który sekwencjonuje nazwy plików w katalogu systemu plików. Iterator może również zejść do podkatalogów. |
Klasa file_status |
Zawija element file_type . |
Struktury
Nazwa/nazwisko | opis |
---|---|
space_info struktura |
Zawiera informacje o woluminie. |
Funkcje
Operatory
Wyliczenia
Nazwa/nazwisko | opis |
---|---|
copy_options |
Wyliczenie używane z copy_file i określa zachowanie, jeśli plik docelowy już istnieje. |
directory_options |
Wyliczenie określające opcje iteratorów katalogów. |
file_type |
Wyliczenie typów plików. |
perm_options |
Wylicza opcje funkcji permissions . |
perms |
Typ maski bitowej używany do przekazywania uprawnień i opcji uprawnień |