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 运行 没问题。
经验教训:始终保持我的编码步骤清晰....
谢谢你让我回到正轨。
我正在开发一个必须与一些 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 运行 没问题。
经验教训:始终保持我的编码步骤清晰....
谢谢你让我回到正轨。