QFile无法删除C盘上的文件

时间:2017-04-23 23:12:58

标签: qt

我有一个显示文件的listWidget。我可以删除桌面和其他位置上的选定文件,但C驱动器上的文件不会删除。如何删除C盘上的文件?我只是想删除单个文件,而不是目录。我正在使用Windows。这是我的代码段。

 void MainWindow::on_removeSelectedFile_clicked() {

   QString fileToRemove = ui->listWidget->currentItem()->text();

 QFile::setPermissions(ui->listWidget->currentItem()->text(), 
 QFile::ReadOwner|QFile::WriteOwner|QFile::ExeOwner);

 QFile::remove(fileToRemove);
 ui->listWidget->takeItem(ui->listWidget->currentRow());
}

我尝试过设置所有不同的权限。 我也尝试过使用下面的代码,但不确定我是否用它做了正确的事情:

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
qt_ntfs_permission_lookup++;

如何删除C驱动器上有权删除任何位置的任何文件的文件?

1 个答案:

答案 0 :(得分:1)

为了实现这一点,我在程序启动时需要管理员权限。这是解决方案。

1)创建rc文件:打开记事本并将以下文本粘贴到内部,然后将文件保存为yourappname.rc这将创建rc文件。将文件放在包含所有源代码和专业文件的文件夹中。

#include <windows.h>
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "yourappname.exe.manifest"

2)使用记事本创建清单文件,粘贴以下文本,并将其保存为yourappname.exe.manifest并将其放在与上面相同的位置。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="2.0.0.0" processorArchitecture="X86"
  name="yourappname.yourappname" type="win32" />
  <description>A discription of your app</description>
  <dependency />
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
   </trustInfo>
</assembly>

3)在你的专业档案中输入以下文字:

win32 {
    RC_FILE = yourappname.rc
}

那就是它。现在您的应用程序应该以管理员权限开始。

也有类似的帖子描述了这个过程。只需确保文件夹名称中没有空格,否则它将无法正常工作。此外,您必须运行具有管理员权限的qt才能工作。在尝试编译之前,右键单击Qt并以管理员身份运行。