Я сделал код для подсчета слов в файле.
Но я хочу настроить его так, чтобы он читал все .txt
файлы в одном каталоге. Я обнаружил, что мне нужно использовать <filesystem>
, но я не знаю, как его настроить.
int EBook::get_total_num_words()
{
map <string, int> words;
int count = 0;
string ws;
ifstream file("inputs\\test.txt");
std::string path = "\\inputs";
//for (const auto& entry : std::filesystem::directory_iterator(path)) {
while (file >> ws) {
if (words[ws])
{
++words[ws];
}
else {
words[ws] = 1;
}
}
file.close();
return (int)words.size();
}
Вы уже знаете о directory_iterator
. Просто переместите ifstream
внутрь цикла, построив его с помощью path
текущего entry
, например:
int EBook::get_total_num_words()
{
map <string, int> words;
string word;
std::string path = "\\inputs";
for (const auto& entry : std::filesystem::directory_iterator(path)) {
if (entry.path().extension().string() != ".txt") continue;
ifstream file(entry.path());
while (file >> word) {
++words[word];
}
}
return (int)words.size();
}
@ Большое спасибо, но у меня есть вопрос. Я думаю, что мне нужно использовать if (entry.path().extension = = ".txt") ifstream file~~~ правильно кодирует. есть ли проблемы, если я кодирую таким образом?