Как очистить содержимое каталога в c ++ в Linux (в основном я хочу сделать 'rm -rf <directorypath>/ *' - PullRequest
10 голосов
/ 06 июля 2010

Я пишу программу на С ++ для Linux (Ubuntu). Я хотел бы удалить содержимое каталога. Это могут быть свободные файлы или подкаталоги.

По сути, я хотел бы сделать что-то эквивалентное

rm -rf <path-to-directory>/*

Можете ли вы предложить лучший способ сделать это в c ++ вместе с необходимыми заголовками. Возможно ли это сделать с помощью sys / stat.h или sys / types.h или sys / dir.h?!

Ответы [ 3 ]

30 голосов
/ 06 июля 2010

Используйте функцию nftw() (File Tree Walk) с флагом FTW_DEPTH. Укажите обратный вызов, который просто вызывает remove() переданного файла:

#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <ftw.h>
#include <unistd.h>

int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
    int rv = remove(fpath);

    if (rv)
        perror(fpath);

    return rv;
}

int rmrf(char *path)
{
    return nftw(path, unlink_cb, 64, FTW_DEPTH | FTW_PHYS);
}

Если вы не хотите удалять сам базовый каталог, измените функцию unlink_cb(), чтобы проверить уровень:

int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
    int rv;

    if (ftwbuf->level == 0)
        return 0;

    rv = remove(fpath);

    if (rv)
        perror(fpath);

    return rv;
}
3 голосов
/ 06 июля 2010
0 голосов
/ 06 июля 2010
system ("rm -rf <path-to-directory>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...