1、用到了QDir QDirIterator遞歸文件目錄
2、QTextStream以某種編碼格式讀取文本保存到QString,然后以另一種編碼格式保存文本
3、界面很簡單,如下:
#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QFileInfo>#include <QTextCodec>#include <QTextStream>#include <QDir>#include <QDirIterator>#include <QFileDialog>Widget::Widget(QWidget *parent) :QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); // 添加編碼 QStringList items; items << "UTF-8"<<"GBK"; ui->comboBoxCodecSource->clear(); ui->comboBoxCodecDest->clear(); ui->comboBoxCodecSource->addItems(items); ui->comboBoxCodecSource->setCurrentText("GBK"); ui->comboBoxCodecDest->addItems(items); ui->comboBoxCodecDest->setCurrentText("UTF-8"); m_strTrPath = "";//目錄路徑}Widget::~Widget(){ delete ui;}void Widget::on_btnPRoject_clicked(){ static QString strDir = "d:/";//初始目錄 strDir = QFileDialog::getExistingDirectory(this, tr("選擇目錄"), strDir, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); // 選擇工程目錄 if (!strDir.isEmpty()) { m_strTrPath = strDir; ui->labelStatus->setText(QString("選擇目錄[%1]").arg(strDir)); } else strDir = "d:/";}void Widget::on_btnChange_clicked()//點擊開始轉換按鈕{ QDir dir (m_strTrPath); QDirIterator dirIterator(m_strTrPath, QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); ui->textBrowser->clear(); do { QStringList filters; filters << "*.pro" << "*.cpp" << "*.h"; dir.setPath(m_strTrPath); ui->textBrowser->append(QString("<span style=/" color:#FF0000;/">進入目錄:</span> [ %1 ] <br>").arg(m_strTrPath)); // 轉換文件 foreach (QFileInfo fileInfo, dir.entryInfoList(filters)) changeTextcodec(fileInfo.absoluteFilePath()); // 轉換編碼 } while (dirIterator.hasNext()&&(m_strTrPath = dirIterator.next())!="");}void Widget::changeTextcodec(QString fileName)//改變文本編碼的關鍵代碼,fileName是帶路徑的文件名{ QFile fileRead(fileName); fileRead.open(QIODevice::ReadOnly); QTextStream out(&fileRead); //這一句需要知道文本當前的編碼格式 out.setCodec(QTextCodec::codecForName(ui->comboBoxCodecSource->currentText().toLatin1())); out.setAutoDetectUnicode(true); QString strTemp; QStringList strContents; while (!out.atEnd()) { strTemp = out.readLine(); strContents << strTemp; } fileRead.close(); QFile fielWrite(fileName); if (!fielWrite.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate)) { ui->labelStatus->setText("文件打開失敗!"); return; } QTextStream in(&fielWrite); in.setCodec(QTextCodec::codecForName(ui->comboBoxCodecDest->currentText().toLatin1())); in.setAutoDetectUnicode(true); for (int i = 0; i < strContents.size(); i++) in << strContents.at(i) << endl; fielWrite.close(); ui->textBrowser->append(QString("<span style=/" color:#0000FF;/">轉換完成:</span> [ %1 ] <br>").arg(fileName));}代碼下載地址:http://download.csdn.net/detail/bladeandmaster88/9747442
|
新聞熱點
疑難解答