2017-04-23 105 views
-1

我有一個顯示文件的listWidget。我可以刪除桌面和其他位置上的選定文件,但C盤上的文件不會被刪除。我如何刪除C盤上的文件?我只是想刪除單個文件,而不是目錄。我正在使用Windows。這是我的代碼片段。QFile無法刪除C驅動器上的文件

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

我試過設置所有不同的權限。 我曾嘗試使用以下,但不知道代碼,如果我在做它正確的事情也試過:有權限刪除任何位置的任何文件在C盤上

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; 
qt_ntfs_permission_lookup++; 

如何刪除文件?

+1

您是否以管理員身份運行程序? – Mike

+0

你在哪裏右鍵單擊?你使用的是Qt Creator嗎? – Mike

+0

什麼說'QFile :: errorString()'? –

回答

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並以管理員身份運行。