【问题标题】:Read from a text file in a Qt program running at startup从启动时运行的 Qt 程序中的文本文件中读取
【发布时间】:2015-04-09 08:48:53
【问题描述】:

我在嵌入式 linux 上运行 Qt 程序。我的程序需要能够从位于同一文件夹中的文本文件中读取一些信息。当我运行程序时,一切正常。

我现在想让我的程序在启动时启动,所以我添加了这一行

/home/my_program_name -qws &

到 /etc/init.d 文件夹中的文件之一。当我重新启动机器时,程序会运行,但它似乎无法读取文本文件。程序启动时,该文件夹似乎尚未初始化或读取。

我应该提到 /etc/init.d 文件夹包含几个按字母顺序执行的文件,并且 Qt 程序是最后一个要执行的文件(即在最后一个文件的末尾)。

如何让我的程序在启动时访问文本文件?

【问题讨论】:

  • 您是尝试通过相对路径名还是绝对路径名打开文件?这个进程的工作目录不会是/home。
  • 您需要使用该文本文件的绝对路径。如果您不知道将它放在哪里,您可能想看看 Linux 标准库。
  • 在我为我的嵌入式系统交叉编译之前,该文本文件包含在 Qt 程序的资源文件中。当我不在启动时运行程序时,绝对路径名不是问题吗?
  • 我有点困惑,您尝试打开的文件是在二进制可执行文件的资源中还是与二进制可执行文件位于同一文件夹中?因为这有很大的不同。
  • @Marco 两者都在

标签: c++ qt embedded startup readfile


【解决方案1】:

为了打开具有相对路径的文件(例如与应用程序相同的目录),您需要确保当前目录是程序的位置。

您可以使用以下方法将当前目录设置为应用程序的目录。

int main(int argc, char *argv[])
{
    Q_INIT_RESOURCE(myapplication);

    QApplication a(argc, argv);
    QDir::setCurrent(qApp->applicationDirPath());
    ...

或

int main(int argc, char *argv[])
{
    Q_INIT_RESOURCE(myapplication);

    QApplication a(argc, argv);
    QDir::setCurrent(QFileInfo(argv[0]).absoluteDir().absolutePath());

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2015-01-15
    相关资源
    最近更新 更多