无法在Win 7上的Qt 4.8中删除以前由应用程序创建的文件

时间:2016-02-15 20:29:47

标签: windows permissions qt4 file-permissions

我已将.tat文件从Qt-ressources复制到文件系统并执行它。 之后我想删除该文件,但它在Qt中失败了。如果我重启应用程序也失败了。但是,可以在文件资源管理器中删除该文件。

我尝试了QFile::remove以及QDir::remove。静态和非静态版本 - 没有影响。 我试图使用原生文件分隔符调用 - 也没有帮助。

此代码有什么问题?

if ( QFileInfo( dataRootPath+"/backupdb.bat" ).exists() )
{
    //debugger stepps in
    QFile f( QFileInfo( dataRootPath+"/backupdb.bat" ).canonicalFilePath());
    f.remove(  );
}

2 个答案:

答案 0 :(得分:1)

我遇到了将文件从资源复制到文件系统并尝试在此之后将其删除的问题。 QFile :: errorString()返回“拒绝访问”。所以资源文件似乎有一些由QFile :: copy复制的讨厌权限。可能是可以更改权限但我使用自己的2个函数来复制文件:

bool copyTextFile(QString srcPath, QString dstPath)
{
    QFile file(srcPath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return false;
    return writeTextFile(QString::fromUtf8(file.readAll()), dstPath);
}

bool writeTextFile(QString data, QString dstPath)
{
    QFile file(dstPath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
        return false;
    QTextStream stream(&file);
    stream << data;
    return true;
}

答案 1 :(得分:1)

我先更改其权限,然后再将其删除。

QFile::copy(":/res/1.txt", "D:\\1.txt");
QFile file("D:\\1.txt");
file.setPermissions(file.permissions() |
                    QFileDevice::WriteOwner |
                    QFileDevice::WriteUser |
                    QFileDevice::WriteGroup |
                    QFileDevice::WriteOther);
file.remove();