【问题标题】:How to change the current working directory?如何更改当前工作目录?
【发布时间】:2015-02-22 05:11:31
【问题描述】:

我正在开发一个程序,该程序从某个目录获取文件并将其复制到 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();

我的问题是,我将如何改变这条路?

【问题讨论】:

  • Here。根据我接受的答案,尽管我问了一个不同的问题。
  • @Tay2510,你的链接太棒了,谢谢你的帮助,当我需要在 Mac 上运行应用程序时它工作了。但是,有没有办法在移植到 iOS 设备时使其工作?
  • 嗯...我没有开发移动设备的经验,当谈到更改工作目录时,我能想到的就是这个链接。也许您可以在标题和问题中说明您对 iOS 的需求?

标签: c++ ios macos qt qtcore


【解决方案1】:

复制到Qt的工作目录

不确定在这种情况下您所说的“Qt”到底是什么意思。如果它是安装库的位置,则应将该路径与文件名相关联,然后进行处理,而不是将当前工作目录设置为公平的。

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

如果你还是坚持要改变当前工作目录或者什么原因,可以使用这个静态方法:

bool QDir::​setCurrent(const QString & 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 解决了我的问题。我需要做的是更改 Projects->Run Settings->Working Directory 中指定的构建目录。
  • 一个很好的答案,它不仅仅是一个链接,而是一个很好的解释,并且仍然有一个工作示例。恭喜! (网站上的许多答案只是链接或刚刚输入“试试这个”)
【解决方案2】:

QDir 有一个函数,setCurrent,用于此目的。

bool QDir::setCurrent ( const QString & path ) [static]

更多信息请访问http://doc.qt.io/qt-4.8/qdir.html#setCurrent

【讨论】:

  • 这是错误的文档,因为 OP 使用的是 5.4,而不是古老的 4.8。在这种情况下,这可能不是问题,但这是一种不好的做法。
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 2010-12-22
相关资源
最近更新 更多