2009-03-24 4 views
20

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

ответ

27

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

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

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

+0

Я использую remove() во всем моем коде - важна переносимость для некоторых из нас. – 2009-03-24 17:19:38

+0

удалить на самом деле в POSIX, что эквивалентно отключению для не-каталогов. – Random832

13

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

#include <cstdio> 

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

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

0

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