1. 程式人生 > >5-Qt讀取檔案失敗原因

5-Qt讀取檔案失敗原因

剛開始準備讀取當前目錄下的txt檔案:

QFile file(":/xuhao.txt");
或者:
QFile file("./xuhao.txt");

 

但是一直出錯,一般就是檔案放錯位置了,可以用絕對路徑測試下,看可以不,一般絕對路徑可以,就是你放錯地方了;

可以列印當前程式執行的目錄對比下你的絕對路徑:

QString runPath = QCoreApplication::applicationDirPath() + "/xuhao.txt";
runPath.replace(QString("/"),QString("\\"));
qDebug() << runPath;

  

可以讀取到你的當前執行路徑,對比下可以發現你的問題。

對於replace的作用是因為路徑中 / 要換成 \\ 才能跑

利用獲取的路徑實際上可以將相對論路徑轉為絕對路徑去訪問檔案,但是一般這是多餘的操作,

一般直接用相對路徑就比較好了。

 

附上一段讀入每一行,讀入到數組裡面的程式碼:

void MainWindow::readFile()
{
    //構造一個以data1.txt為檔名的QFile物件
    QString runPath = QCoreApplication::applicationDirPath() + "/xuhao.txt";
    runPath.replace(QString("/"),QString("\\"));

    qDebug() << runPath;
//    QFile file(":/xuhao.txt");
    //少了   E:\\a-qt\\build-ball3-Desktop_Qt_5_9_1_MinGW_32bit-Debug\\debug\\xuhao.txt
    QFile file("./xuhao.txt");
    //檔案以只讀方式開啟 || 在讀取時,將行結束符轉換成 \n
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug()<< "open file failure";
        return;
    }
    else
    {
        QString array;
        //建立QTextStream流操作物件,與QFile物件file連線
        QTextStream in(&file);
        //讀取所有文字
        array = in.readAll();
        //trimmed():移除字串兩端空白符,simplified():移除字串兩端的空白字元,
        //使用單個空格字元“ ”代替字串中出現的空白字元。
        array = array.trimmed();
        //qDebug()<<array;
        array = array.simplified();
        //qDebug()<<array;

        int i=0,k=0;
        while(i<array.size())
        {
            //.at(int position):返回當前字元的位置index
            name_data[k] += array.at(i);
//            printf("%d: ", i);
            name_data[k]=name_data[k].trimmed();
            if(array.at(i) == " ")
            {
                k++;
            }
            i++;
        }
    }
    file.close();
}