2011-07-20 9 views
5

を削除します。は永久に私は、全体のディレクトリを削除するには、このコードを使用するディレクトリ

uses 
    ShellApi; 

function DelDir(dir: string): Boolean; 
var 
    fos: TSHFileOpStruct; 
begin 
    ZeroMemory(@fos, SizeOf(fos)); 
    with fos do 
    begin 
    wFunc := FO_DELETE; 
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION; 
    pFrom := PChar(dir + #0); 
    end; 
    Result := (0 = ShFileOperation(fos)); 
end; 

は私が削除されたディレクトリの永久的な除去を可能にするために、設定することができます任意のフラグがありますか?
永久に削除すると、DelDir機能を使用すると、削除された後にごみ箱に表示されなくなります。

+2

permament除去は何ですか?だからそれは再現できないのですか? – Jacob

+0

申し訳ありません。永久に削除すると、ごみ箱に表示されません。 – ple103

+0

オリジナル投稿が更新されました。 – ple103

答えて

4

FileOpStruct.pTo := nil;

例を設定してください:

function DeleteTree(const APath: String): Boolean; 
var 
    FileOpStruct : TShFileOpStruct; 
    ErrorCode: Integer; 
begin 
    Result := False; 
    if DirectoryExists(APath) then begin 
    FillChar(FileOpStruct, SizeOf(FileOpStruct), #0); 
    FileOpStruct.Wnd := 0; 
    FileOpStruct.wFunc := FO_DELETE; 
    FileOpStruct.pFrom := PChar(APath + #0#0); 
    FileOpStruct.pTo := nil; 
    FileOpStruct.fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOERRORUI or FOF_NOCONFIRMMKDIR; 
    FileOpStruct.lpszProgressTitle := nil; 
    ErrorCode := ShFileOperation(FileOpStruct); 
    Result := ErrorCode = 0; 
    end; 
end; 
+0

2つのヌルターミネータ( '' pFrom')で十分だと思います。 –

+2

提案された変更は何もしません。元のコードではすでにZeroMemoryを使ってすべてのフィールドを設定しています。これにより、pToを効果的にnilに設定します。元のコードの問題は何ですか?そして、あなたの問題をどのように修正していますか? –

関連する問題