-1

我有一个奇怪的问题。

在 QT 中,我的应用程序工作正常,但是当我运行 .exe 文件时,方法 QDir::entryList 不起作用......我不知道为什么。路径等已设置。

QDir pdir(cs.protocolDir);
QString log;

log.append(QString("[LPR] Trying to fetch protcol files\n"));

QStringList filter("*.txt");
Message locMSG;

QStringList flist = pdir.entryList(QStringList(filter),
                                   QDir::Files | QDir::NoSymLinks);


foreach (QString str, flist) {
    QString filename = QString("%1%2").arg(cs.protocolDir).arg(str);
    log.append(QString("[LPR]Filename: %1\n").arg(filename));
    QFile file(filename);

    //and so on...

我希望有人可以帮助我解决这个问题。谢谢

4

3 回答 3

1

如果未找到构造 QDir 的路径,QDir::entryList()则会静默失败并返回一个空列表。尝试插入:

if (!pdir.exists())
{
    log.append(QString("[LPR] Path %1 does not exist - PWD is %2").arg(cs.protocolDir).arg(QDir::currentPath()));
}

...就在您的第一个日志语句之后,查看是否找到该目录。

cs.protocolDir 中的路径是相对路径吗?如果“在 Qt 中”是指直接从 Qt Creator 运行它,那么 Qt Creator 将设置一个“工作目录”,默认情况下是二进制文件的位置。也许它在这种情况下有效,因为路径是相对于二进制计算的。

当您运行可执行文件时,如果您从命令行运行二进制文件,则工作目录将是您运行二进制文件时所在的任何目录;或您的操作系统选择的某个目录。

如果这是问题,那么您将需要使用绝对路径。

于 2014-03-03T05:25:44.547 回答
0

这都是关于时间/同步的!

在 entryList 执行时,引用的 DIR 还没有准备好,我将解释为什么在调试模式下工作:

在调试模式下,收集器、观察器和许多其他结构有一些(不)显着的延迟,以便进行有效的调试,这会降低性能。

因此,如果目录是动态目录(网络、闪存驱动器、虚拟等),则可能需要等待一段时间,直到目录完全由操作系统构建并准备好访问!

您可以通过在使用路径初始化 QDir 之前放置睡眠来轻松尝试。更改睡眠功能的延迟量,以了解您的 FS/SO 的必要时间;

于 2017-07-27T18:39:15.543 回答
-1

这可能是因为当您从 Qt creator 或 Visual Studio 以调试模式运行应用程序时,以及通过双击运行 exe 文件时,执行路径不同。尝试记录绝对路径 QDir::absolutePath(),并尝试在 cs.protocolDir 中使用绝对路径。

于 2014-03-03T05:12:06.553 回答