2016-02-15 4 views
0

Я скопировал файл .bat из Qt-ressources в файловую систему и выполнил его. После этого я хотел удалить файл, но он не работает в Qt. Если не удается также перезапустить приложение. Однако файл можно удалить в файле-проводнике.Не удается удалить файл, ранее созданный приложением в Qt 4.8, на Win 7

Я пробовал QFile::remove, а также QDir::remove. Статические, а также нестатические версии - никакого эффекта. Я попытался вызвать с помощью собственного файлового разделителя - тоже не помог.

Что не так с этим кодом?

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

Я бы предположил, что это, скорее всего, проблема с разрешениями. Можете ли вы удалить файл из проводника? – Murphy

+0

Что говорит провал? – CristiFati

+0

@CristiFati Что значит? QFile :: remove возвращает bool. Результат «false» –

ответ

1

У меня была такая же проблема, как копирование файла из ресурсов в файловую систему и его удаление после этого. QFile :: errorString() возвращает «Access denied». Таким образом, кажется, что в файле ресурсов есть некоторые неприятные разрешения, которые копируются 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^