Qt,读入本地文本文件

Posted

技术标签:

【中文标题】Qt,读入本地文本文件【英文标题】:Qt, read in a local text file 【发布时间】:2014-11-28 09:22:03 【问题描述】:

我尝试使用 QFile 打开一个文本文件: 我试过了

QFile file("serial_deviceIP.txt");

但是 file.open() 返回 false。

但是,如果我切换到全局地址,例如:

QFile file("C:/Users/shupeng/Documents/qgroundcontrol_peidong_mod/serial_deviceIP.txt");

它有效。为什么?我该如何解决这个问题?

【问题讨论】:

你应该检查当前目录(如here所述),看看你是否真的在文件所在的目录中 【参考方案1】:

在第一种情况下,找不到文件的路径。

QFile file("serial_deviceIP.txt");

这指定了具有相对路径的文件,并且仅当 serial_deviceIP.txt 位于 当前工作目录 中时才有效,该目录很可能是包含您的程序可执行文件的目录。

QFile file("C:/Users/shupeng/Documents/qgroundcontrol_peidong_mod/serial_deviceIP.txt");

这是引用一个绝对文件路径,所以会找到该文件

【讨论】:

【参考方案2】:

您还可以使用 Qt 的资源系统将文件与您的应用程序捆绑在一起。

在您的项目中创建一个.qrc 文件,并将您希望在应用程序中使用/加载的任何文件添加到其中。

然后您可以将文件加载为:

QFile file( ":myfiles/serial_deviceIP.txt" );

更多信息请参见QT Resource System。

【讨论】:

【参考方案3】:

发生的情况是,当我们开发代码时,我们通常会牢记project source dir 作为参考,因此我们不会给出绝对路径,但是在构建之后当前目录会发生变化,它将成为构建目录,所以我们的应用程序不会找到没有绝对路径的文件。

一个可能的解决方案是在我们的项目中添加一个Resources,包括我们的项目目录。所以只需在project_file.pro 中添加以下行:

RESOURCES += ./

然后在阅读时在文件名前加上:字符,点赞:

QFile foo(":bar.txt")

这仅适用于读取,但不适用于写入。所以写是有必要指定一个绝对路径。

【讨论】:

以上是关于Qt,读入本地文本文件的主要内容,如果未能解决你的问题,请参考以下文章

qt文件读取

Qt学习笔记-制作一个文本编辑器

VB6.0中如何实现逐行读入文本文件?

fortran如何读入文本文件中的某行的指定部分

C# - 将大 (150MB) 文本文件读入富文本框

VB中读入文件,如何获得文本的行数