#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
toremove
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 *>
?