5-Qt讀取檔案失敗原因
阿新 • • 發佈:2018-12-16
剛開始準備讀取當前目錄下的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(); }