Допустим, у меня есть эта функция:Печать путь к файлу из переменной в C++
void printPathToFile(std::wstring myPath){
std::wstringstream ss;
ss << myPath;
//When printing myPath as soon as there is a \ it stops so this information is lost.
ss << getOtherReleventLogingInformation();
std::wofstream myfile;
myfile.open ("C:\\log.txt", std::wofstream::app|std::wofstream::out);
myfile << ss.str();
myfile.close();
}
Я не контролировать myPath
аргумент. Прямо сейчас он не имеет \\
в имени пути, поэтому поток интерпретирует их как escape-последовательность, которая не то, что я хочу.
Как использовать переменную std :: wstring в качестве исходной строки?
Если бы это был строковый литерал, я мог бы использовать R"C:\myPath\"
, но как мне добиться того же самого результата без строкового литерала?
Возможным подходом может быть цикл через имя пути и добавление дополнительной обратной косой черты, где необходимо, но, несомненно, C++ имеет нечто более прочное и элегантное ..?
EDIT:
Моя проблема была диагностируется. Оказывается, что обратная косая черта не вызывают каких-либо проблем, что я должен был добавить был:
#include <codecvt>
#include <locale>
const std::locale utf8_locale
= std::locale(std::locale(), new std::codecvt_utf8<wchar_t>());
myFile.imbue(utf8_locale);
Как объяснено здесь: Windows Unicode C++ Stream Output Failure
Путь к файлу теперь отображается правильно, я думал, что с помощью wofstream
заботилась местных жителей для вас, чтобы символы, отличные от ANSII, отображались правильно.
Где? temp_str'? – jpo38
Извините temp_str был ошибкой, которую я отредактировал. – Asics