【Qt】FileIO


【目的】

  • 檔案讀寫練習,讀取一各檔案並反轉檔案內容,寫入另一個檔案。
  • 讀取 UTF8 檔案並顯示內容。
  • 解析 CSV 內容。 (未完)

【程式】

  1. 反轉檔案內容,寫入另一個檔案。
    1. 程式
      #include <QFile>
      #include <QString>
      #include <iostream>
      using namespace std;
      
      int main(int argc, char *argv[]) {
        QString src(argv[1]);
        QFile srcFile(src);
        if (!srcFile.open(QIODevice::ReadOnly))
        {
          cerr << "Cannot open file for reading:"
               << qPrintable(srcFile.errorString()) << endl;
          return false;
        }
      
        QString dest(argv[2]);
        QFile destFile(dest);
        if (!destFile.open(QIODevice::WriteOnly))
        {
          cerr << "Cannot open file for writing: "
               << qPrintable(destFile.errorString()) << endl;
          return false;
        }
      
        QByteArray in = srcFile.readAll();
        QByteArray out;
      
        // Reverse file content
        for (int i=0; i<in.size()-1; i++)
        {
            out.prepend(in.at(i));
        }
      
        destFile.write(out);
        return srcFile.error() == QFile::NoError
               && destFile.error() == QFile::NoError;
      }
    2. 結果
      假設上面程式執行檔名稱為 reverse

      $ echo "0123456789" > a.txt
      $ ./reverse a.txt b.txt
      $ cat b.txt
      $ 9876543210
  2. 讀取檔案並顯示內容。
    1. 以下就重點做記錄,主要是在讀取檔案的時候指定讀取 utf-8 格式的檔案
      QTextStream stream( &srcFile );
      stream.setCodec("UTF-8");
    2. a.txt (被讀取檔案,請存成utf-8格式)
      Привет
      здравствуйте
    3. dialog.h ( 需被Include的檔案)
      #include <QFile>
      #include <QString>
      #include <iostream>
      #include <QTextStream>
      #include <QtDebug>
      using namespace std;
    4. dialog.cpp ( 在setupUi 之後呼叫)
      int Dialog::ReadFile()
      {
          QFile srcFile(tr("a.txt"));
          if (!srcFile.open(QIODevice::ReadOnly))
          {
              cerr << "Cannot open file for reading:"
                      << qPrintable(srcFile.errorString()) << endl;
              return false;
          }
          QTextStream stream( &srcFile );
          stream.setCodec("UTF-8");
          QString line, lines;
          do {
              line = stream.readLine();
              lines += line;
              lines += "\n";
           } while (!line.isNull());
          ui->textBrowser->setText(lines);
          srcFile.close();
          return srcFile.error() == QFile::NoError;
      }
    5. 結果
      image

【參考】

【問題】

  1. 如何製作 hexdump 類似功能。
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com