2009-03-24 4 views
20

Wie löscht man normalerweise Dateien unter Linux? Ich denke an die Verwendung des Funktionsaufrufs unlink, aber ich frage mich, ob Sie eine bessere Idee haben, da der C++ - Standard keine Dateilöschoperation erwähnt und es systemabhängig ist.Datei in C++ unter UNIX entfernen

Antwort

27

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

Der C-Standard bietet remove(), die Sie versuchen könnten, aber bedenken Sie, dass seine behavior is unspecified für etwas anderes als eine 'normale Datei', so dass Sie nicht wirklich abschirmt in plattformspezifische Dateisystemdetails (Links , etc).

Wenn Sie etwas Höheres, robusteres und portableres wollen, dann schauen Sie sich Boost Filesystem an.

+0

Ich benutze remove() in allen meinen Code - Portabilität Angelegenheiten für einige von uns. –

+0

remove wird in POSIX in der Tat angegeben, um der Entkopplung für Nicht-Verzeichnisse zu entsprechen. – Random832

1

unlink ist der richtige Weg, es zu tun.

13

Der Standard enthält eine Funktion namens remove, die das tut. Obwohl ich dafür boost.filesystem bevorzugen würde (wenn ich sowieso Boost sowieso verwende).

#include <cstdio> 

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

unlink() wird durch die POSIX Standards definiert ist, und somit wird auf jedem POSIX-kompatibelen System vorhanden ist, und auf eine ganz wenige, die nicht kompatibel POSIX ist.

0

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