Windows Can';t删除以前在Win 7上由Qt 4.8中的应用程序创建的文件

Windows Can';t删除以前在Win 7上由Qt 4.8中的应用程序创建的文件,windows,permissions,qt4,file-permissions,Windows,Permissions,Qt4,File Permissions,我已经将一个.bat文件从Qt Resources复制到一个文件系统并执行了它。 之后,我想删除该文件,但在Qt中失败了。当我重新启动应用程序时,If也会失败。但是,可以在文件资源管理器中删除该文件 我尝试了QFile::remove以及QDir::remove。静态版本和非静态版本-无效果。 我尝试使用本机文件分隔符调用-也没有帮助 这个代码有什么问题 if ( QFileInfo( dataRootPath+"/backupdb.bat" ).exists() ) { //debug

我已经将一个.bat文件从Qt Resources复制到一个文件系统并执行了它。 之后,我想删除该文件,但在Qt中失败了。当我重新启动应用程序时,If也会失败。但是,可以在文件资源管理器中删除该文件

我尝试了
QFile::remove
以及
QDir::remove
。静态版本和非静态版本-无效果。 我尝试使用本机文件分隔符调用-也没有帮助

这个代码有什么问题

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

我在将文件从资源复制到文件系统并尝试在之后将其删除时遇到了同样的问题。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;
}
bool copyTextFile(QString srcPath,QString dstPath)
{
QFile文件(srcPath);
如果(!file.open(QIODevice::ReadOnly | QIODevice::Text))
返回false;
返回writeTextFile(QString::fromUtf8(file.readAll()),dstPath);
}
bool writeTextFile(QString数据,QString路径)
{
QFile文件(dstPath);
如果(!file.open(QIODevice::WriteOnly | QIODevice::Text))
返回false;
QTextStream流(&文件);

stream我在将文件从资源复制到文件系统并尝试在之后将其删除时遇到了相同的问题。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;
}
bool copyTextFile(QString srcPath,QString dstPath)
{
QFile文件(srcPath);
如果(!file.open(QIODevice::ReadOnly | QIODevice::Text))
返回false;
返回writeTextFile(QString::fromUtf8(file.readAll()),dstPath);
}
bool writeTextFile(QString数据,QString路径)
{
QFile文件(dstPath);
如果(!file.open(QIODevice::WriteOnly | QIODevice::Text))
返回false;
QTextStream流(&文件);

stream我在删除它之前更改了它的权限

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();

我在删除它之前更改了它的权限

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();

我猜这很可能是权限问题。你能从资源管理器中删除该文件吗?失败的原因是什么?@CristiFati你是什么意思?QFile::remove返回bool。结果为“false”@Murphy Yes:“但是,该文件可以在文件资源管理器中删除。”为什么会出现权限问题?该文件是从同一用户创建和删除的。Win 7中的应用程序是否具有不同的权限?在这种情况下,Explorer的权限比VisualStudio多?确定:
QFile::error()
errorString()
。联机引用是您的朋友。检查权限只是根据您的描述得出的第一个猜测;可能您的应用程序正在其他用户环境中运行。我猜这很可能是权限问题。您可以从资源管理器中删除该文件吗?失败说明了什么?@CristiFati您的意思是什么?QFile::remove返回bool。结果为“false”@Murphy Yes:“但是,可以在文件资源管理器中删除该文件。”为什么权限问题?该文件是从同一用户创建和删除的。Win 7中的应用程序是否具有不同的权限?在这种情况下,资源管理器的权限比VisualStudio多?确定:
QFile::error()
errorString()
。联机引用是您的朋友。检查权限只是根据您的描述得出的第一个猜测;可能您的应用程序正在其他用户上下文中运行。