Как написать функцию, которая будет чистить папку? - PullRequest
1 голос
/ 18 июня 2019

Мне нужно написать функцию, которая будет чистить папку.Я уже пишу код

void cleandir(const char* path)
{
    struct dirent* file;
    struct stat filestat;
    DIR* fold = opendir(path);
    chdir(path);    //Open in this catalog
    while((file = readdir(fold)) != NULL)
    {
        if((strcmp(".", file->d_name) == 0) || (strcmp("..", file->d_name) == 0)) //Skip '.' and '..'
        continue;
    stat(file->d_name, &filestat);  //Put the info about file to the filestat struct
    if(S_ISDIR(filestat.st_mode) == 1)
    {
        //What to do if it's a folder
        //Recursion?
    }
    else if(S_ISREG(filestat.st_mode) == 1)
    {
        //What to do if it's a file
    }
  }
}

Я использую Linux Mint Cinnamon 19.1.Версия ядра 4.15.0-50-универсальная.

Ответы [ 2 ]

1 голос
/ 18 июня 2019

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

ИМХО, вы должны проверять только каталоги, потому что каталог можно удалить только тогда, когда он пуст, поэтому здесь необходима рекурсия (с последующим вызовом rmdir) и все другие записи, для которых вы можете просто использовать unlink .

1 голос
/ 18 июня 2019

Чтобы обработать каталог, вы могли бы снова вызвать ваш cleandir рекурсивно и передать path с добавлением разделителя каталогов и file->d_name в качестве аргумента. Когда рекурсия вернется, используйте удалить , чтобы удалить каталог.

Для удаления файла вы можете использовать unlink .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...