Namensräume
Varianten
Aktionen

std::filesystem::remove, std::filesystem::remove_all

Von cppreference.com
 
 
 
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)
(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

#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) [bearbeiten]