Как вы, ребята, обычно удаляете файлы в ОС Linux? Я думаю об использовании вызова функции unlink
, но мне интересно, есть ли у вас лучшая идея, поскольку в стандарте C++ нет упоминания об операции удаления файла, и он зависит от системы.Удалить файл на C++ под UNIX
ответ
Yep - стандарт C++ оставляет этот материал до ОС, поэтому, если вы работаете в Linux (или любой системе POSIX), то unlink()
- это то, что у вас есть.
Стандарт C предоставляет remove()
, который вы можете попробовать, но имейте в виду, что его behavior is unspecified для чего-либо иного, кроме «обычного файла», поэтому он не защитит вас от доступа к данным файловой системы конкретной платформы (ссылки , и т.д).
Если вы хотите что-то более высокоуровневое, более надежное и портативное, ознакомьтесь с Boost Filesystem.
unlink - правильный способ сделать это.
Стандарт включает в себя функцию, называемую remove, которая делает это. Хотя я бы предпочел boost.filesystem
для этого (если я уже использую boost в любом случае).
#include <cstdio>
int main() {
std::remove("/home/js/file.txt");
}
unlink()
определяется POSIX стандартами, и, следовательно, будет существовать на любой совместимой системе POSIX, и очень немногие, которые не POSIX совместим.
Обратите внимание, что последние ядра также предлагают unlinkat
. Эта функция работает быстрее, чем unlink
, если у вас есть файловый дескриптор самой директории.
Я использую remove() во всем моем коде - важна переносимость для некоторых из нас. – 2009-03-24 17:19:38
удалить на самом деле в POSIX, что эквивалентно отключению для не-каталогов. – Random832