Re[3]: проблема с std::ifstream::open
От: _niko_ Россия  
Дата: 30.09.16 18:48
Оценка:
Здравствуйте, _hum_, Вы писали:

__>теперь переделал на

__>
__>QString qsFullFileName = QFileDialog::getOpenFileName(...);

__>if(!qsFullFileName.isEmpty())
__>        {
__>            //---
__>            std::ifstream ifs;

__>            ifs.open(qsFullFileName.toStdWString());
__>


__>заработало. но такой код вообще переносим (меня смущает конвертация из QString в std::wstring)?



На 99% уверен что проблемы была в кодировке, ибо вот:

QString qsFullFileName;

// Если исходный файл в кодировке: utf-8
qsFullFileName = QString::fromUtf8(R"(d:\WORK\!!!!!статья — блабла\programma\projs\conception\file)");
qsFullFileName = QTextCodec::codecForName("UTF8")->toUnicode(R"(d:\WORK\!!!!!статья — блабла\programma\projs\conception\file)");

// Если исходный файл в кодировке: Windows-1251
qsFullFileName = QTextCodec::codecForName("CP1251")->toUnicode(R"(d:\WORK\!!!!!статья — блабла\programma\projs\conception\file)");

std::ifstream ifs;
ifs.open(qsFullFileName.toLocal8Bit());

// Если код исполняется на ОС Windows (запуск из explorer'а, IDE)
ifs.open(QTextCodec::codecForName("CP1251")->fromUnicode(qsFullFileName));

// Если код исполняется на ОС Windows (запуск из CMD)
ifs.open(QTextCodec::codecForName("IBM866")->fromUnicode(qsFullFileName));

std::cout << "open = " << std::boolalpha << ifs.is_open() << std::endl;
Отредактировано 30.09.2016 18:50 _niko_ . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.