У меня есть процесс, вызываемый QProcess *. После создания я подключаю его сигнал закончено () к слоту, который удаляет некоторые полученные файлы. Этот процесс создает набор файлов, которые хорошо известны во время выполнения. Я создаю QFile * объект для каждого из них. Я пытаюсь удалить эти файлы после , когда указанный процесс завершен.
Проблема заключается в следующем: если я пытаюсь удалить их с помощью QFile :: remove () или QDir :: remove () , похоже, ничего не происходит. Однако, если я пытаюсь переименовать их, он переименовывается, но за до процесс завершается - даже если его завершенный сигнал был отправлен. Также, QDir :: removeRecursively () удаляет их. Я попытался создать новый каталог, переместить файлы в эту папку и использовать Qdir :: removeRecursively () - и даже удалил весь мой рабочий стол - но, как я уже сказал, слот для удаления файлов вызывается до того, как процесс действительно завершится. Я пытался использовать QProcess :: waitForFinished () , чтобы предотвратить этот преждевременный вызов, но это не сработало.
Кстати, я спрашиваю пользователя, где сохранить файлы, чтобы они могли быть сохранены где угодно, когда я пытаюсь их удалить. Кроме того, я не могу запросить права администратора.
Спасибо!
QProcess call
QProcess *execute_call = new QProcess(this);
execute_call->setWorkingDirectory(lastSavingLocation + "/control/");
execute_call->setProgram(execute_call->workingDirectory() + "execute.bat");
connect(execute_call, SIGNAL(finished(int)), this, SLOT(DeleteExecutionFiles(int)));
execute_call->start();
execute_call->waitForFinished(-1);
//I tried to put this
//before the start() call, but nothing seems to change
Слот DeleteFiles
void MainWindow::DeleteExecutionFiles(int status)
{
if(status == 0)
{
qDebug() << "slot called";
QFile *lof_mh = new QFile(lastSavingLocation + "/lof-mh.exe");
QFile *libgomp = new QFile(lastSavingLocation + "/libgomp-1.dll");
QFile *libwin = new QFile(lastSavingLocation + "/libwinpthread-1.dll");
QFile *tests_env = new QFile(lastSavingLocation + "/control/lof-mh-testenvironment-tool.exe");
QFile *execute = new QFile(lastSavingLocation + "/control/execute.bat");
QFile *execute_bat = new QFile(lastSavingLocation + "/control/executeParallel.bat");
lof_mh->setFileName(lastSavingLocation + "/lof-mh.exe");
libgomp->setFileName(lastSavingLocation + "/libgomp-1.dll");
libwin->setFileName(lastSavingLocation + "/libwinpthread-1.dll");
tests_env->setFileName(lastSavingLocation + "/control/lof-mh-testenvironment-tool.exe");
execute->setFileName(lastSavingLocation + "/control/execute.bat");
execute_bat->setFileName(lastSavingLocation + "/control/executeParallel.bat");
lof_mh->remove();
libgomp->remove();
libwin->remove();
tests_env->remove();
execute->remove();
execute_bat->remove();
}
}
Редактировать 1
После использования qDebug () с QFile :: errorString () получил это
lof_mh.remove();
qDebug() << lof_mh.errorString(); //"Negated Access"
libgomp.remove();
qDebug() << libgomp.errorString(); //"Negated Access"
libwin.remove();
qDebug() << libwin.errorString(); //"Negated Access"
tests_env.remove();
qDebug() << tests_env.errorString(); //"Negated Access"
execute.remove();
qDebug() << execute.errorString(); //"Unknown Error"
execute_bat.remove();
qDebug() << execute_bat.errorString(); //"Unknown Error"