Удалить все папки, кроме определенных

У меня уже есть функция повышения, чтобы удалить одну папку за раз. remove_all();

Список папок:

folder1
folder2
folder3
folder4
folder5

Я хочу удалить их все с моей функцией выше, но сохраняю folder2 и folder5.

2

Решение

Я на самом деле нашел 2 способа, как это сделать.

Сначала я помещаю свой список папок в массив.

1-й способ: использовать функцию, чтобы найти подстроку в моем массиве строк, а затем стереть ее.

2-й способ: использовать strcmp для сравнения с моим строковым массивом, а затем стереть найденный поисковый тег.

И вот окончательный код:

// simple_ls program form boost examples
// http://www.boost.org/doc/libs/1_52_0/libs/filesystem/example/simple_ls.cpp
#define BOOST_FILESYSTEM_VERSION 3

//  We don't want to use any deprecated features
#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
#  define BOOST_FILESYSTEM_NO_DEPRECATED
#endif
#ifndef BOOST_SYSTEM_NO_DEPRECATED
#  define BOOST_SYSTEM_NO_DEPRECATED
#endif

#include "boost/filesystem/operations.hpp"#include "boost/filesystem/path.hpp"#include "boost/progress.hpp"#include <iostream>
#include <cstring>

using namespace std;
using namespace boost::filesystem;
unsigned long dir_count = 0;

void RemoveSub(string& sInput, const string& sub) {
string::size_type foundpos = sInput.find(sub);
if ( foundpos != string::npos )
sInput.erase(sInput.begin() + foundpos, sInput.begin() + foundpos + sub.length());
}

int listDir(string d) {
d.erase(
remove( d.begin(), d.end(), '\"' ),
d.end()
); //Remove Quotes

if (!is_directory(d)) {
cout << "\nNot found: " << d << endl;
return 1;
}
directory_iterator end_iter;
for (directory_iterator dir_itr(d);
dir_itr != end_iter;
++dir_itr) {
if (is_directory(dir_itr->status())) {
++dir_count;
string v = dir_itr->path().filename().string();
v.erase(
remove( v.begin(), v.end(), '\"' ),
v.end()
);
string m[] = { v };
string mm = m[0].c_str();
RemoveSub(mm, "folder2"); // Keep folder2
RemoveSub(mm, "folder5"); // Keep folder5
/*
if( strcmp(m[0].c_str(), "folder2") == 0 ) mm.erase (mm.begin(), mm.end()); // Keep folder2
if( strcmp(m[0].c_str(), "folder5") == 0 ) mm.erase (mm.begin(), mm.end()); // Keep folder5
*/
if(!mm.empty()) { // Remove folders
cout << "\nRemoving: " << mm << " ...";
remove_all(d+"/"+mm);
}
}
}
return 0;
}

int main(int argc, char* argv[]) {
string i;
cout << "\nx: Exit\n\nDelete all folders in: ";
getline(cin,i);
if(i=="X" || i=="x") return 0;
if(i.empty()) return 0;

listDir(i); //Call our function
return 0;
}
1

Другие решения

Других решений пока нет …