filesystem::directory_iterator и кириллица
Продолжение вопроса Ошибка при компиляции - error_code (boost::filesystem::directory_iterator), но пробую решить по другому.
Посоветовали всё перевести в wstring.
Изменено 2:
Изменил точку входа, ошибка пропала.
Пробую решить методом: Русский язык в консоли
#include <iostream>
#include <string>
#include <string.h>
#include <windows.h>
#include <filesystem>
#include <io.h>
#include <fcntl.h>
using namespace std;
class Find {
private:
wstring null = L"?";
wstring findFile_ (wstring name, wstring path) {
wcout << name << " " << path << endl;
wstring temp;
error_code ec;
wcout << "1" << endl;
for (auto& file : filesystem::directory_iterator(name, ec)) {
wcout << "2" << endl;
temp = file.path().wstring();
wcout << temp << endl;
if (filesystem::is_directory(file)) {
wstring find = findFile_(name, temp);
if (find != null) return find;
}
if (name == temp.substr(temp.find_last_of(L"\\") + 1, wstring::npos)) return file.path().wstring();
}
wcout << "3" << endl;
return null;
}
public:
wstring findFile (wstring name) {
DWORD drives = GetLogicalDrives();
char diskName;
wstring disk;
wstring ret;
for (unsigned char i = 0; i < 32; i++) {
if (drives & (1 << i)) {
diskName = 'A' + i;
disk.clear();
disk.push_back(diskName);
disk += L":\\";
ret = findFile_(name, disk);
if (ret != null) return ret;
}
}
return null;
}
};
int main () {
_setmode(_fileno(stdout), _O_U16TEXT);
_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stderr), _O_U16TEXT);
wcout << L"Unicode -- English -- Русский -- Ελληνικά -- Español -- Українська." << endl;
Find f;
wcout << f.findFile(L"Aboba.txt") << endl;
system("pause");
return 0;
}
Теперь другая проблема:
Не срабатывает цикл
for (auto& file : filesystem::directory_iterator(name, ec)) {
wcout << "2" << endl;
temp = file.path().wstring();
wcout << temp << endl;
if (filesystem::is_directory(file)) {
wstring find = findFile_(name, temp);
if (find != null) return find;
}
if (name == temp.substr(temp.find_last_of(L"\\") + 1, wstring::npos)) return file.path().wstring();
}
Выводит в консоль:
Unicode -- English -- Русский -- Ελληνικά -- Español -- Українська.
Aboba.txt C:\
1
3
Aboba.txt F:\
1
3
?
Для продолжения нажмите любую клавишу . . .
Думаю, причина в name
, но не знаю, как можно это проверить и исправить
Источник: Stack Overflow на русском