Подтвердить что ты не робот

Удалить файл в С++ под UNIX

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

#include <cstdio>

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

Ответ 3

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

Ответ 4

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

Ответ 5

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