it-swarm.com.de

Entfernen Sie die Datei in C++ unter UNIX

Wie löscht ihr normalerweise Dateien unter Linux? Ich denke darüber nach, den Funktionsaufruf unlink zu verwenden, aber ich frage mich, ob Sie eine bessere Idee haben, da der C++ - Standard den Vorgang zum Löschen von Dateien nicht erwähnt und systemabhängig ist.

20
Sasha

Ja - der C++ - Standard überlässt dies dem Betriebssystem. Wenn Sie also unter Linux (oder einem POSIX-System) arbeiten, ist unlink() genau das, was Sie haben.

Der C-Standard bietet remove() , das Sie ausprobieren können, aber denken Sie daran, dass das Verhalten nicht spezifiziert ist für etwas anderes als eine "reguläre Datei", sodass Sie nicht wirklich davor geschützt sind, auf die Plattform zu gelangen -spezifische Dateisystemdetails (Links usw.).

Wenn Sie etwas übergeordnetes, robusteres und portableres möchten, lesen Sie Boost Filesystem .

27
Todd Gamblin

Der Standard enthält eine Funktion namens remove , die dies ausführt. Allerdings würde ich dafür boost.filesystem vorziehen (wenn ich ohnehin schon boost benutze).

#include <cstdio>

int main() {
    std::remove("/home/js/file.txt");
}

unlink() wird durch die POSIX -Standards definiert und ist daher auf jedem POSIX-kompatiblen System und auf einigen anderen Systemen, die nicht POSIX-kompatibel sind, verfügbar.

2
Alnitak

unlink ist der richtige Weg, um es zu tun.

1
smoofra

Beachten Sie, dass neuere Kernel auch unlinkat anbieten. Diese Funktion ist schneller als unlink, wenn Sie einen Dateideskriptor im Verzeichnis selbst haben.

0
Yoric