Qt:中文路径下的文件打不开问题的解决方案

​ 一般情况下在Qt程序中使用c/c++原生的文件api(fopen、ifstream)打开在中文路径中的文件时一般会报文件打开失败或者文件不存在的错误,而使用QFile打开中文路径中的文件时却不会出现该问题。

​ 主要的原因在于:Qt中的QString使用的是UTF-16编码,而c/c++api中使用的是本地系统的编码格式,所以在打开文件的时候会报错。

​ 解决该问题有两种方法:

  1. 使用Qt原生的QFile类来打开中文路径的文件;
  2. 使用QString中的toLocal8Bit()方法。

本文使用的Qt版本:Qt5.4

使用QFile打开中文路径中的文件

void MainWindow::on_pushButton_clicked(void)
{
    QString strFilePath = QFileDialog::getOpenFileName(this, "open", "");
    qDebug() << "打开文件的路径为:" << strFilePath;

    QFile file;
    file.setFileName(strFilePath);
    
    if (!file.open(QIODevice::ReadWrite))
    {
        qDebug() << "文件打开失败";
    }
    else
    {
        qDebug() << "文件打开成功";
        qDebug() << "文件内容:" << QString(file.readAll());
    }
}

运行结果如下:
在这里插入图片描述

使用QString中的toLocal8Bit()方法

void MainWindow::on_pushButton_clicked(void)
{
  QString strFilePath = QFileDialog::getOpenFileName(this, "open", "");
  qDebug() << "打开文件的路径为:" << strFilePath;

  QByteArray aDatas   = strFilePath.toLocal8Bit();
  char acReadBuf[256] = {0};

  FILE *pFile = NULL;
  pFile       = fopen(aDatas.data(), "r");

  if (NULL == pFile)
  {
      qDebug() << "文件打开失败";
  }
  else
  {
      qDebug() << "文件打开成功";

      fgets(acReadBuf, 256, pFile);
      qDebug() << "文件内容:" << QString(acReadBuf);
  }
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值