QT QDir::entryList 在发布中不起作用
QT QDir::entryList not working in release
我有一个奇怪的问题。
在QT中,我的应用程序工作正常,但是当我运行.exe文件时,方法QDir::entryList不起作用...我不知道为什么。路径等已设置。
QDir pdir(cs.protocolDir);
QString log;
log.append(QString("[LPR] Trying to fetch protcol filesn"));
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: %1n").arg(filename));
QFile file(filename);
//and so on...
我希望有人可以帮助我解决这个问题。感谢
如果未找到构造 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将设置一个"工作目录",默认情况下是二进制文件的位置。 也许它在这种情况下有效,因为路径是相对于二进制文件计算的。
运行可执行文件时,工作目录将是运行二进制文件时所在的任何目录(如果从命令行运行);或者操作系统选择的某个目录。
如果这是问题所在,则需要改用绝对路径。
这一切都与定时/同步有关!
引用的 DIR 在执行 entryList 的那一刻还没有准备好,我将解释为什么在调试模式下工作:
在调试模式下,收集器、观察程序和许多其他结构会有一些(不)明显的延迟,以允许有效的调试,这会降低性能。
因此,如果目录是动态目录(网络、闪存驱动器、虚拟等),则可能需要等待一段时间,直到该目录完全由操作系统构建并准备好访问!
您可以在使用路径初始化 QDir 之前轻松尝试进入睡眠状态。更改睡眠功能的延迟量,以了解FS/SO的必要时间;
这可能是因为当您从Qt创建器或Visual Studio以调试模式运行应用程序时,以及通过双击运行exe文件时,执行路径不同。尝试记录绝对路径 QDir::absolutePath(),并尝试在 cs.protocolDir 中使用绝对路径。
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- 为什么二进制搜索在我的测试中不起作用
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- CLANG格式在缺少libtinfo.so.5库中不起作用
- sigwait() 在多线程程序中不起作用
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 为什么 isVisible 在 QWidget 孩子中不起作用
- 点云库在VS 2019中不起作用,但在VS 2017中确实有效
- 为什么 QDir::exists() 在 docker 容器中不起作用?
- C++实用程序::转换在静态链接库中不起作用
- 重载运算符 (<<) cout 在 c ++ 中不起作用,当我互相减去两个矩阵时不起作用
- 正向打包在模板类中不起作用
- getline 函数似乎在 C++ 中不起作用
- 代码在Visual Studio 2017中不起作用,但在VS代码中工作
- std::string == 运算符在代码中不起作用
- CAFFE转发网络在for循环中不起作用
- binary_search() 函数在我的函数体中不起作用
- 为什么读取函数在 sha1 c++ 实现中不起作用?
- C++ 多态性在代码::块 17.12 中不起作用