std::filesystem::remove, std::filesystem::remove_all
Von cppreference.com
< cpp | filesystem
| Definiert in Header <filesystem> |
||
| bool remove( const std::filesystem::path& p ); |
(1) | (seit C++17) |
| bool remove( const std::filesystem::path& p, std::error_code& ec ) noexcept; |
(2) | (seit C++17) |
| std::uintmax_t remove_all( const std::filesystem::path& p ); |
(3) | (seit C++17) |
| std::uintmax_t remove_all( const std::filesystem::path& p, std::error_code& ec ); |
(4) | (seit C++17) |
1,2) Die Datei oder das leere Verzeichnis, das durch den Pfad p identifiziert wird, wird gelöscht, als ob durch das POSIX
remove. Symlinks werden nicht verfolgt (der Symlink wird gelöscht, nicht sein Ziel).3,4) Löscht den Inhalt von p (falls es ein Verzeichnis ist) und den Inhalt all seiner Unterverzeichnisse, rekursiv, dann löscht p selbst, als ob durch wiederholtes Anwenden des POSIX
remove. Symlinks werden nicht verfolgt (der Symlink wird gelöscht, nicht sein Ziel).Inhalt |
[bearbeiten] Parameter
| p | - | zu löschender Pfad |
| ec | - | Ausgabeparameter für die Fehlerberichterstattung in der nicht-werfenden Überladung. |
[bearbeiten] Rückgabewert
1,2) true, wenn die Datei gelöscht wurde, false, wenn sie nicht existierte. Die Überladung, die ein
error_code& Argument nimmt, gibt bei Fehlern false zurück.3,4) Gibt die Anzahl der gelöschten Dateien und Verzeichnisse zurück (was Null sein kann, wenn p von Anfang an nicht existierte). Die Überladung, die ein
error_code& Argument nimmt, gibt bei Fehlern static_cast<std::uintmax_t>(-1) zurück.[bearbeiten] Ausnahmen
Jede Überladung, die nicht als noexcept markiert ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung fehlschlägt.
1,3) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit p als erstem Pfadargument und dem OS-Fehlercode als Fehlercodeargument.
2,4) Setzt einen std::error_code&-Parameter auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten.
[bearbeiten] Hinweise
Auf POSIX-Systemen ruft diese Funktion normalerweise unlink und rmdir nach Bedarf auf, unter Windows DeleteFileW und RemoveDirectoryW.
Wenn p nicht existierte, gibt diese Funktion false zurück und meldet keinen Fehler.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <cstdint> #include <filesystem> #include <fstream> #include <iostream> int main() { namespace fs = std::filesystem; std::cout << std::boolalpha; fs::path tmp{std::filesystem::temp_directory_path()}; const auto O_O{"O_O"}; std::ofstream{tmp / O_O} << O_O; // creates file containing O_O std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // success std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // fail std::filesystem::create_directories(tmp / "abcdef/example"); const std::uintmax_t n{fs::remove_all(tmp / "abcdef")}; std::cout << "remove_all(): " << n << " files or directories\n"; }
Mögliche Ausgabe
remove(): true remove(): false remove_all(): 2 files or directories
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3014 | C++17 | Die error_code Überladung von remove_all ist als noexcept markiert, kann aber Speicher allozieren |
noexcept entfernt |
[bearbeiten] Siehe auch
| löscht eine Datei (function) |