如何更改当前工作目录?

6
我正在开发一个程序,该程序将从特定目录获取文件,并将其复制到Qt的工作目录中,以供我的应用程序读取。目前,我的当前路径为:

/Users/softwareDev/Desktop/User1/build-viewer-Desktop_Qt_5_4_0_clang_64bit-Debug/viewer.app/Conents/MacOS/viewer

为了获取这个路径,我使用了:
qDebug() << QDir::current().path();

并通过以下方式确认该目录:

qDebug() << QCoreApplication::applicationDirPath();

我的问题是,我该如何更改这个路径?


1
这是一个关于编程的内容,需要将它从英语翻译成中文。请返回仅已翻译的文本: 这里。这是我接受的一个答案,尽管我问了不同的问题。 - Tay2510
@Tay2510,你的链接太棒了,感谢你的帮助,在我需要在 Mac 上运行应用程序时它起了很大的作用。但是,当移植到 iOS 设备上时,有没有办法让它工作? - abuv
嗯...我没有开发移动设备的经验,当谈到更改工作目录时,那个链接是我所能想到的全部。也许你可以在标题和问题中具体说明你对iOS的需求? - Tay2510
2个回答

9

将其复制到Qt的工作目录中

不确定您在此上下文中所指的“Qt”是什么意思。如果它是库安装的位置,则应将该路径与要处理的文件名相关联,而不是设置当前工作目录。

但是为什么要改变工作目录呢?虽然您可能想解决一个问题,但您可能会立即引入整套其他问题。这感觉像XY问题。我认为您在实践中需要不同的解决方案,例如前面提到的。

如果您仍然坚持更改当前工作目录或任何原因,请使用此静态方法:

bool QDir::​setCurrent(const QString & path)

将应用程序的当前工作目录设置为path。如果成功更改目录,则返回true;否则返回false。

因此,您将发出类似于以下内容的内容:

main.cpp

#include <QDir>
#include <QDebug>

int main()
{
    qDebug() << QDir::currentPath();
    if (!QDir::setCurrent(QStringLiteral("/usr/lib")))
        qDebug() << "Could not change the current working directory";
    qDebug() << QDir::currentPath();
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建和运行

qmake && make && ./main

输出

"/tmp/stackoverflow/change-cwd"
"/usr/lib"

你说得对,我陷入了 XY 问题。我的问题已经在 @Tay2510 的帮助下解决了。我需要做的是更改在“项目”->“运行设置”->“工作目录”中指定的构建目录。 - abuv
一个非常好的答案,不仅仅是一个链接,而且还有很好的解释和可行的示例。恭喜!(这个网站上很多答案只是链接或者只是简单地打了一句“试试这个”) - Guilherme Nascimento

3

这份文档是错误的,因为 OP 使用的是 5.4 而不是古老的 4.8。在这种情况下可能不是问题,但这是一个不好的做法。 - László Papp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接