【问题标题】:Changing backslash to forward slash in a QString在 QString 中将反斜杠更改为正斜杠
【发布时间】:2011-03-26 09:37:05
【问题描述】:

我有一个程序,它给出一个 QString 并将每个“\”更改为“/”。看起来很简单,但是当我使用下面的代码时,会发生 5 个错误:

QString path ;
path = "C:\MyLife\Image Collection" ;
for( int i=0 ; i < path.size() ; i++ )
{
    if( path[i] == "\" )
        path[i] = "/" ;
}
qDebug() << path ;

【问题讨论】:

  • “5 个错误发生...”请提供有关这些错误的详细信息。
  • 一方面 " 表示 C/C++ 中的字符串 - 使用 ' 表示字符。
  • 你应该看看 QString::replace 和 QDir::toNativeSeparators
  • 欢迎来到 StackOverflow。请查看faq。我们注意到您提供的答案很少,没有接受任何答案,也没有感谢通过投票来帮助您的用户。您也不要 pay it forward 偶尔尝试帮助其他社区成员获得他们问题的答案。如果这种行为成为一种模式,您的帐户可能会被暂停。请意识到人们正在努力帮助您,并体谅他们的努力。
  • 养成在 Qt 路径中使用/ 的习惯,它适用于所有平台,我认为 `` 只是 Windows,MS 和它们的不兼容敦促......

标签: c++


【解决方案1】:

请立即止血!并使用跨平台目录/路径包装类。 Qt 有一些:QDir、QFileInfo、QFile。只需使用它们。

哦,QDir 为您提供了一个不错的静态方法,这正是您想要的:

 path = QDir::fromNativeSeparators(path);

没有理由手动进行(有错误)

【讨论】:

  • 这里一样,文档不正确吗? qt-project.org/doc/qt-4.8/qdir.html#fromNativeSeparators
  • 文档是正确的。此函数在 linux 上对反斜杠没有任何作用,这是正确的,因为 '\' 是文件名的有效字符,并且通常此类函数可能会使此类文件无法访问。
  • 不幸的是,没有:fromNativeSeparators 将 \ 转换为 / 仅当可执行文件在 Windows 中运行时。如果你在 Linux 中运行它并且需要转换 Windows 路径,它就不会工作。 (因为 \ 不是本地的)。我在 Qt 中没有找到解决方案。
【解决方案2】:

你需要逃跑\

if( path[i] == '\\' )

相同
path = "C:\\MyLife\\Image Collection" ;

http://en.wikipedia.org/wiki/C_syntax#Backslash_escapes

【讨论】:

  • 或者使用 C++0x 原始字符串! (无需转义)
【解决方案3】:

因为反斜杠 \ 用作转义字符(例如 \n 换行符、\r 回车和 \b 退格),所以您需要使用另一个反斜杠来转义反斜杠,以便给您一个字面反斜杠。也就是说,无论你想要\,你都放\\

【讨论】:

    【解决方案4】:

    没有人在同一篇文章中修复了你的两个错误,所以这里是:

        if( path[i] == '\\' ) // Double backslash required, and
            path[i] = '/' ;   // single quote (both times!)
    

    【讨论】:

      【解决方案5】:
      • 不能在 C/C++ 中直接比较字符串。
      • 可以比较字符。
      • “\”是字符串,而“\”是字符。

      【讨论】:

      • 你的意思是:“\\”是一个字符串,而“\\”是一个字符。
      【解决方案6】:

      Linux 上的 Qt4 对我有用的是:

      std::replace( path.begin(), path.end(), QChar('\\'), QChar('/') );
      

      显然,Qt 函数都不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        • 2011-05-16
        • 2021-12-31
        相关资源
        最近更新 更多