【问题标题】:how do i change a file extension on qt如何在qt上更改文件扩展名
【发布时间】:2015-05-05 13:42:39
【问题描述】:

我有一段代码可以从服务器下载文件。但是,由于服务器限制,我无法将 .exe 文件放在服务器上。所以我将我的 XXX.exe 文件重命名为 XXX.alt(只是一个随机扩展名)并将其放在服务器上。 现在我的代码可以下载XXX.alt,但是在QT环境下如何将文件名从XXX.alt改回XXX.exe呢?

【问题讨论】:

    标签: c++ qt file-extension fileinfo


    【解决方案1】:

    使用 QFileInfo 获取没有最后一个扩展名的路径,然后附加新的扩展名。

    QFileInfo info(fileName);
    QString strNewName = info.path() + "/" + info.completeBaseName() + ".exe";
    

    【讨论】:

    • 我认为这需要一个分隔符:QString strNewName = info.path() + "/" + info.completeBaseName() + ".exe"; 在 Linux 上,QFileInfo::path() 返回的路径末尾不包含分隔符。
    • @Mitch 谢谢。固定。
    【解决方案2】:

    只需使用“stdio.h”中的重命名功能即可。

    char oldname[] ="XXX.alt";
    char newname[] ="XXX.exe";
    result= rename( oldname , newname );
    if ( result == 0 )
      puts ( "File successfully renamed" );
    else
      perror( "Error renaming file" );
    

    【讨论】:

    • 在 Qt 中这将是 QFile::rename(const QString & oldName, const QString & newName) 尽管您发布的 c 代码应该可以正常工作。
    • 你们两个都是对的。谢谢。我发现我们甚至不需要放置旧名称。我们可以 QFile(const QString & newName)
    【解决方案3】:

    一种解决方案是找到最后一个'.',并将从该位置到末尾的子字符串替换为您想要的子字符串。

    具体怎么做,std::stringQString 都有很多方法,因为它们都支持在字符串中查找字符(以及从末尾到开头的搜索),并替换子字符串。

    【讨论】:

      【解决方案4】:

      更喜欢使用 baseName()

      QFileInfo info(fileName);
      QString strNewName = info.path() + info.baseName() + ".exe";
      

      QString QFileInfo::completeBaseName () const
      Returns file name with shortest extension removed (file.tar.gz -> file.tar)
      
      QString QFileInfo::baseName () const
      Returns file name with longest extension removed (file.tar.gz -> file)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 2017-03-12
        相关资源
        最近更新 更多