Как передать строки из вектора в функцию удаления C ?

#c #string #vector

#c #строка #вектор

Вопрос:

У меня есть программа на C , которая пытается выполнить ls команду, а затем пытается сохранить имена файлов в vector виде:

 vector<char *> exec(const char *cmd)
{
    int count = 0;
    char buffer[128];
    vector<char *> resu<
    FILE *pipe = popen(cmd, "r");
    if (!pipe)
        throw std::runtime_error("popen() failed!");
    try
    {
        while (fgets(buffer, sizeof buffer, pipe) != NULL)
        {
            count  ;
            result.push_back(buffer);
        }
    }
    catch (...)
    {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return resu<
}
 

Затем попробуйте удалить эти файлы, используя их в другой функции:

 void nuke_folder()
{
    vector<char *> files = exec(LIST_DIR);
    for (int i = 0; i < files.size(); i  )
    {
        cout << files[i] << endl;
        if (remove(files[i]) != 0)

            perror("Error deleting file");
    }
}
 

Но nuke_folder ничего не делает с файлами, как я могу удалить файлы, передав строки из вектора?

Комментарии:

1. я думаю, вам нужно указать правильный путь, по которому файлы расположены, например ~/Desktop/dir_name , file_name to remove function . Можете ли вы указать аргумент для ls command?

2. Возможно, в качестве дополнительного примечания, если это часть какого-то более крупного кода, который должен работать с файловой системой, я бы предложил изучить filesystem , которая поддерживается в большинстве новых версий компилятора (требуется поддержка C 17).

3. @Qubit это не работает с моей версией g (4.9)

4. Возможно, вам придется использовать std::experimental::filesystem некоторые старые версии g . Но я думаю, что в 4.9 этого еще может и не быть (я не проверял тщательно).

5. @nietzsche result.push_back(buffer); — Это не сработает, так как вы сохраняете адрес локальной переменной. Почему бы не использовать std::vector<std::string> вместо std::vector<char *> ?