Удалить файл в C ++ под UNIX - PullRequest
20 голосов
/ 24 марта 2009

Как вы, ребята, обычно удаляете файлы в ОС Linux? Я думаю об использовании вызова функции unlink, но мне интересно, есть ли у вас идея получше, поскольку в стандарте C ++ нет упоминания об операции удаления файла, и она зависит от системы.

Ответы [ 5 ]

28 голосов
/ 24 марта 2009

Да - стандарт C ++ оставляет все это на усмотрение ОС, поэтому, если вы работаете в Linux (или в любой системе POSIX), unlink() - это то, что у вас есть.

Стандарт C предоставляет remove(), который вы можете попробовать, но имейте в виду, что его поведение не определено для всего, кроме «обычного файла», поэтому оно не на самом деле не оградит вас от подробностей о файловой системе платформы (ссылки и т. д.).

Если вы хотите что-то более высокого уровня, более надежное и более портативное, посмотрите Boost Filesystem .

14 голосов
/ 24 марта 2009

Стандарт включает в себя функцию remove , которая делает это. Хотя я бы предпочел boost.filesystem для этого (если я все равно использую повышение).

#include <cstdio>

int main() {
    std::remove("/home/js/file.txt");
}
2 голосов
/ 24 марта 2009

unlink() определяется стандартами POSIX и, следовательно, будет существовать в любой POSIX-совместимой системе, а также во многих, которые не POSIX-совместимы.

1 голос
/ 24 марта 2009

unlink - правильный способ сделать это.

0 голосов
/ 15 мая 2012

Обратите внимание, что последние ядра также предлагают unlinkat. Эта функция быстрее, чем unlink, если у вас есть файловый дескриптор в самом каталоге.

...