gpt4 book ai didi

c++ - 从C++中的变量打印文件路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:38 25 4
gpt4 key购买 nike

假设我有这个功能:

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 参数。现在它的路径名中没有 \\ 因此流将它们解释为转义序列,这不是我想要的。

如何将 std::wstring 变量用作原始字符串?

如果它是一个字符串文字,我可以使用 R"C:\myPath\"但是如果没有字符串文字,我如何实现同样的事情呢?

一种可能的方法是遍历路径名并在需要的地方添加一个额外的反斜杠,但 C++ 肯定有更健壮和优雅的东西..?

编辑:

我的问题被误诊了。事实证明反斜杠不会造成任何麻烦,我必须添加的是:

#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 字符可以正确显示。

最佳答案

我建议您只需将 \\ 替换为 /,它们的工作原理相同(甚至更好,因为它们在所有平台上都有效):

void printPathToFile( std::wstring myPath )
{
std::wstring mySafePath = myPath;
std::replace( mySafePath.begin(), mySafePath.end(), '\\', '/');

// then use mySafePath in the rest of the function....
}

关于c++ - 从C++中的变量打印文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31192139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com