QT 调试 QFile::remove() Windows 10 MSVS 2019

QT Debugging QFile::remove() Windows 10 MSVS 2019

我正在开发一个必须与一些 Windows 实用程序通信的 QT 应用程序。 这些实用程序的结果是几个“生产文件”,应列在“filenames-txt-file”中以供进一步使用。

这种带有“生产文件”列表的“文件名-txt-文件”的生产是通过 QT 使用 QFileInfo 完成的。
有时,旧的“filenames-txt-file”已存在于工作目录中,应在使用新结果创建它之前将其删除。

这是问题所在:
QFile::remove("somefile") 在调试时不起作用。
它工作正常,当我 运行 中的 Exe MSVS 之外的调试文件夹,
并且在发布版本中工作正常运行。

调试时,我收到以下消息:

if (QFile::exists(filenameFull)) {
    QFile f (filenameFull);     
    qDebug() << f.remove(filenameFull);     // returns false
    qDebug() << f.errorString();            // returns “unknown error”
}

我以管理员身份将 Microsoft Visual Studio 2019 提升为 运行。
我确实将 UAC 执行级别设置为“highestAvailable”。
调试时是否需要其他任何东西才能使此代码正常工作?

它可能不相关,但 f.remove(filenameFull) 您可以只使用 f.remove()QFile::remove(filenameFull)

QFile::remove on windows 使用 winapi 函数 DeleteFileW(("\\?\" + QDir::toNativeSeparators(filenameFull)).utf16()) 其中“\\?\”用于避免 MAX_PATH 限制。尝试直接调用此函数并分析结果。

您正在调用静态函数 QFile::remove(QString filename),因此 f 没有发现错误。所以试试这个:

if (QFile::exists(filenameFull)) {
    QFile f (filenameFull);
    qDebug() << f.exists();
    qDebug() << f.remove();      
    qDebug() << f.errorString();
}

这应该解决了关于没有得到错误字符串的部分。

感谢@hyde 解决了。 问题确实是 filenameFull 一直打开。
不是在代码本身,而是在 Configuration Properties -> Debugging -> Command Arguments
它在编码过程的早期阶段挂在那里。
它也解释了为什么 运行 debugging-process 之外的 EXE 运行 没问题。
经验教训:始终保持我的编码步骤清晰....
谢谢你让我回到正轨。