使用 Qt 挂载网络驱动器

Posted

技术标签:

【中文标题】使用 Qt 挂载网络驱动器【英文标题】:mount network drives with Qt 【发布时间】:2015-01-07 15:32:11 【问题描述】:

我尝试使用 Qt 在 Linux 中安装网络驱动器 (CIFS)。但它不起作用。是否还有另一种解决方案,没有 QProcess?

QProcess connectSamba;
    QString terminalCommand;
    terminalCommand = "mount -t cifs //" + ip + "/folder/ " + mountpath;
    connectSamba.start(terminalCommand);

【问题讨论】:

【参考方案1】:

想知道是否有其他解决方案,我认为您应该检查并理解为什么 QProcess 不适合您。

以这种方式调用QProcess::start 会将第一个令牌(mount)作为命令,并将以下每个项目(以空格分隔)作为参数传递。因此,诸如“//”和“/folder/”之类的标记不是 mount 命令的有效参数。

您可以通过执行以下操作来使用 QProcess:-

QProcess connectSamba;

QString mountPath = "//" + ip + "/folder/ " + mountpath;
QString terminalArgs = QString("-c \"mount -t cifs %1\"").arg(mountPath);
connectSamba.start("/bin/bash", terminalArgs);
connectSamba.waitForFinished();

请注意,终端参数用引号括起来,以确保只传递一个参数,并且我们使用 -c 参数调用 bash 解释器,该参数从正在进行的字符串中获取命令。

【讨论】:

非常感谢。这对我有帮助!但现在我有第二个问题。读取“connectSamba.readAllStandardError()”-function 表示“mount:只有 root 可以使用“--types”选项”。 -.- 由于这是一个不同的问题,请您将其标记为已回答并在 SO 上开始一个新问题;它使其他人更容易搜索相同或相似问题的答案。

以上是关于使用 Qt 挂载网络驱动器的主要内容,如果未能解决你的问题,请参考以下文章

linux挂载网络驱动器解释命令

sh 挂载网络共享驱动器 - Linux

sh 永久挂载网络驱动器Ubuntu 16.04

PHP 无法将上传的文件移动(写入)到挂载的网络驱动器

是否可以使用 Qt 类枚举网络根?

读取网络驱动器上的文件