web-dev-qa-db-fra.com

Supprimer le fichier en C++ sous UNIX

Comment supprimez-vous généralement les fichiers sous Linux? Je pense utiliser l'appel de fonction unlink, mais je me demande si vous avez une meilleure idée, car la norme C++ ne mentionne pas l'opération de suppression de fichier et dépend du système.

20
Sasha

Oui, la norme C++ laisse ce système à l'OS. Par conséquent, si vous êtes sous Linux (ou sur tout système POSIX), unlink() est ce que vous avez.

La norme C fournit remove() , ce que vous pouvez essayer, mais gardez à l'esprit que son comportement n'est pas spécifié pour autre chose qu'un "fichier normal", il ne vous empêche donc pas d'entrer dans la plateforme. -des détails spécifiques du système de fichiers (liens, etc.).

Si vous voulez quelque chose de plus haut niveau, plus robuste et plus portable, consultez Boost Filesystem .

27
Todd Gamblin

La norme inclut une fonction appelée remove qui le fait. Bien que je préférerais boost.filesystem pour cela (si j'utilise déjà boost de toute façon).

#include <cstdio>

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

unlink() est défini par les normes POSIX et existera donc sur tout système compatible POSIX, et sur bon nombre de systèmes non compatibles POSIX.

2
Alnitak

unlink est la bonne façon de le faire.

1
smoofra

Notez que les noyaux récents offrent également unlinkat. Cette fonction est plus rapide que unlink si vous avez un descripteur de fichier sur le répertoire lui-même.

0
Yoric