我有一个奇怪的问题。
在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...
我希望有人可以帮我解决这个问题。 THX
答案 0 :(得分: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将设置一个“工作目录”,默认情况下是二进制文件的位置。也许它适用于那种情况,因为路径是相对于二进制计算的。
运行可执行文件时,如果从命令行运行二进制文件,则工作目录将是您运行二进制文件时所在的目录。或者您的操作系统选择的某个目录。
如果这是问题所以你需要使用绝对路径。
答案 1 :(得分:0)
关于计时/同步的全部内容!
在执行entryList时,引用的DIR尚未就绪,我将解释为什么在调试模式下工作:
在调试模式下,收集器,观察者和许多其他结构有一些(显着)延迟,以便进行有效调试,从而降低性能。
因此,如果目录是动态目录(网络,闪存驱动器,虚拟等等),可能需要等待一段时间,直到操作系统完全构建目录并准备好进行访问!
您可以轻松尝试在使用路径初始化QDir之前进行睡眠。更改睡眠功能的延迟量,以了解FS / SO的必要时间;
答案 2 :(得分:-1)
这可能是因为当你从Qt creator或visual studio以调试模式运行应用程序时执行路径不同,并且当你通过双击运行exe文件时。尝试记录绝对路径QDir :: absolutePath(),并尝试在cs.protocolDir中使用绝对路径。