System plików przechowuje i klasyfikuje pliki na medium, często jeden lub więcej dysków pamięci, w sposób, który czyni je dostępnymi do pobierania. Większość nowoczesnych systemów plików utrzymuje pliki zorganizowane w formie przypominającej drzewo (lub hierarchiczne). Jeden lub więcej węzłów korzeniowych znajduje się u góry drzewa. System plików jest biblioteką w standardzie C ++ 17, która umożliwia nam pracę ze ścieżką plików, katalogami, statusem i błędami plików w hierarchicznym systemie plików. Wzmocnienie.Biblioteka systemu FileSystem służy jako podstawa do tworzenia tej standardowej biblioteki. Dzięki tej bibliotece zbadamy różne funkcje systemu plików i ich wydajność w C ++ 17 i uzyskamy dostęp do ich właściwości i wyszukiwania. Przestrzeń nazw FileSystem nagłówek systemu plików ::. Użyjemy aliasu przestrzeni nazw podanych w następujących przykładach we wszystkich przypadkach, aby uprościć kod.
Przykład 1: Korzystanie z STD :: system plików :: istnieje
STD :: system plików zapewnia funkcję używaną do ustalenia, czy plik lub katalog z określoną ścieżką lub statusem już istnieje. W tym celu wdrażamy program, w którym importujemy bibliotekę „system plików” i tworzymy funkcję pustki „demo”. Dla funkcji demo podajemy ścieżkę i funkcję statusu z systemu plików klasy. Następnie stosujemy warunek IF-ELSE, aby zwrócić instrukcję istnienia pliku.
Wewnątrz klauzuli if, wywołujemy funkcję „fs :: istnieje” i przekazujemy zmienną „s” dla statusu pliku i „pTH” dla ścieżki pliku. Jeśli istnieje status pliku, a ścieżka pliku istnieje, drukuje „znaleziony”. A jeśli plik nie istnieje, instrukcja „nie znaleziono” jest wydrukowana. Główna funkcja jest zaimplementowana ze ścieżką plików i tworzenia katalogu.
Najpierw określamy ścieżkę pliku. Następnie tworzymy katalog i symbol do katalogu, aby połączyć dwa pliki. Wszystkie funkcje, których używamy, są obsługiwane przez bibliotekę systemu plików. Aby iterować wpisy do katalogu, używamy funkcji Directory_iterator.
#włączać
#włączać
#włączać
#włączać
przestrzeń nazw fs = std :: FileSystem;
void demo (const fs :: ścieżka i pth, fs :: file_status s = fs :: file_status )
STD :: Cout << pth;
if (fs :: status_nknow (s) ? FS :: istnieje (s): fs :: istnieje (pth))
STD :: Cout << " Found\n";
w przeciwnym razie
STD :: Cout << "Not Found\n";
int main ()
const fS :: PATH FILEBOX „Filebox”;
fs :: create_directory (pliki pudełka);
std :: OfStream filebox/"plik";
fs :: create_symLink („nie istnieje”, Filebox/„SymLink”);
Demo (Filebox);
dla (const auto i wpis: fs :: Directory_iterator (Filebox))
demo (wpis, wpis.status());
fs :: remove_all (filebox);
Do kompilacji funkcji i kodów C ++ 17 używamy następujących poleceń. Dlatego możemy zobaczyć istnienie ścieżki pliku i statusu pliku na ekranie wyjściowym:
Przykład 2: Korzystanie z STD :: FileSystem :: File_Size
Std :: FileSystem :: File_Size to funkcja dostarczona przez std :: filiSystem biblioteka C++. Zastanówmy się nad przykładem, w którym ścieżka pliku jest przekazywana, a powiązany obiekt jest tworzony wraz z rozmiarem pliku, który ma zostać pobrany. Ponieważ wszystkie funkcje systemu plików są obsługiwane przez bibliotekę systemu plików, dodajemy bibliotekę „” do naszego programu. Następnie, z przestrzenią nazw, oznaczamy „STD :: Filesystem” jako „FS”.
Następnie używamy funkcji FS :: PATH i określamy ścieżkę pliku „główne.C". Następnie nazywamy STD :: Ofstream i przekazujemy obiekt ścieżki pliku. Używamy również funkcji put (), która przyjmuje znak „a” do normalnego użycia. Następnie pobieramy rozmiar pliku za pomocą funkcji plików :: FILE_SIZE Funkcja. W przypadku systemu plików :: Usuń funkcję, usuwamy ścieżkę pliku. Ostatecznie mamy blok próbny do złapania i rzucania błędem, jeśli wystąpi.
#włączać
#włączać
#włączać
przestrzeń nazw fs = std :: FileSystem;
int main ()
fs :: ścieżka filepath = fs :: current_path () / "main.C";
STD :: Ofstream (FilePath).Put („a”);
STD :: Cout << "File size = " << fs::file_size(filepath) << '\n';
FS :: Usuń (FilePath);
próbować
fs :: file_size („/dev”);
catch (fs :: filesystem_error & e)
STD :: Cout << e.what() << '\n';
Pobraliśmy rozmiar pliku, wdrażając program za pomocą systemu plików :: FILE_SIZE Funkcja. Mamy błąd systemu plików, aby nie uzyskać rozmiaru pliku.
Przykład 3: Korzystanie ze std :: FileSystem :: FileSystem_error Funkcja
Gdy przeciążenia wyrzucania funkcji biblioteki systemu plików nie powiodło się, obiekt błędu określony przez klasę std :: Rzutowany jest błąd systemu plików. Używamy modułu błędu systemu, który obsługuje błąd programu. Identyfikujemy ścieżki nieistniejących plików w kolejnym kodzie. Blok Catch bierze STD :: FileSystem :: FileSystem_error w nim do rzucania wyjątkiem systemu plików.
Tutaj używamy różnych wywołań funkcji, aby wydrukować wyjątki dla plików, które nie znaleziono. Używamy funkcji STD :: What () do wykrycia wyjątku, która zwraca zerową sekwencję znaków. Następnie używamy funkcji ścieżki () z obiektem File_ERROR „E”. Na koniec drukujemy wartość, komunikat i kategorię generowaną z funkcji błędu systemu plików. Generujemy również instrukcję kodu błędu ze funkcji STD :: ERROR_CODE.
#włączać
#włączać
#włączać
int main ()
const std :: FileSystem :: ścieżka z "/nofile1/a", do "/nofile2/b";
próbować
std :: FileSystem :: copy_file (od, do);
catch (std :: FileSystem :: filesystem_error const & e)
STD :: Cout
<< "what(): " << e.what() << '\n'
<< "path1(): " << e.path1() << '\n'
<< "path2(): " << e.path2() << '\n'
<< "code().value(): " << e.code().value() << '\n'
<< "code().message(): " << e.code().message() << '\n'
<< "code().category(): " << e.code().category().name() << '\n';
std :: error_code err;
std :: FileSystem :: copy_file (od, do, err);
STD :: Cout << "\nerror_code has non-throwing sets: " << err.message() << '\n';
Błędy są generowane przez funkcję File_ERROR, ponieważ nie można znaleźć takiego pliku ani katalogu.
Przykład 4: Korzystanie z STD :: FileSystem :: Funkcja absolutna
Mamy inną funkcję Whis to „STD :: FileSystem :: Absolute”, który daje absolutną ścieżkę pliku. Ścieżka jest absolutna, która zawsze zawiera komponent podstawowy i całą listę katalogów, które są potrzebne do znalezienia pliku. Tutaj, wewnątrz głównej funkcji, używamy funkcji STD :: FileSystem :: PATH i tworzy jego obiekt jako „FP”. Następnie podajemy ścieżkę pliku jako „główne.C". Wyświetlamy bieżącą ścieżkę pliku i bezwzględną ścieżkę określonego pliku za pomocą polecenia Cout. Ścieżka absolutna jest wyświetlana przez przekazanie obiektu ścieżki pliku „FP” w funkcji „STD :: FileSystem :: Absolute”.
#włączać
#włączać
przestrzeń nazw fs = std :: FileSystem;
int main ()
STD :: FileSystem :: ścieżka fp = "Main.C";
STD :: Cout << "Current path " << fs::current_path() << '\n';
STD :: Cout << "Absolute path of" << fp << " is "
<< std::filesystem::absolute(fp) << '\n';
Możemy zobaczyć bieżącą ścieżkę pliku w naszym systemie i bezwzględną ścieżkę pliku uzyskanego z funkcji bezwzględnej systemu plików.
Wniosek
Biblioteka STD :: FileSystem, która ma szereg funkcji, została wprowadzona w C ++ 17. Ale omówiliśmy tylko kilka funkcji systemu plików. Standardowa biblioteka zawiera bardzo korzystne i starannie zbudowane klasy i funkcje, z którymi można sobie radzić, a obsługa specyficzna dla systemu operacyjnego jest wyodrębniana. Zaimplementowaliśmy pliki funkcji systemu plików, aby poznać istnienie pliku w naszym pierwszym przykładzie. Następnie użyliśmy funkcji rozmiaru pliku, aby uzyskać rozmiar pliku. Ponadto zastosowaliśmy funkcję błędu systemu plików, aby pokazać, w jaki sposób wyjątki są generowane w pliku. Użyliśmy również bezwzględnej funkcji systemu plików, aby pobrać bezwzględną ścieżkę pliku.