刚开始准备读取当前目录下的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"); //文件以只读方式打开 || 在读取时,将行结束符转换成 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(); }