2017-03-12 20 views
0

私は今、フォルダの内容を削除するために以下のコードを使用していますが、現在使用している唯一の問題は、ファイルのうち1つが使用中であれば、ソフトウェアのユーザーへの進捗。ポップアップなしでファイルを削除するDelphiを使用して

これらは一時ファイルなので、ユーザーはポップアップで完全に困惑し、それについて尋ねています。

ファイルを使用中または削除できない場合、コードは次のファイルに移動し、次の試みまで無視されます。エラーが発生した際に任意のダイアログが表示されないようにするために

コード

procedure DelFilesFromDir(Directory, FileMask: string; DelSubDirs: Boolean); 
var 
    SourceLst: string; 
    FOS: TSHFileOpStruct; 
begin 
    FillChar(FOS, SizeOf(FOS), 0); 
    FOS.Wnd := Application.MainForm.Handle; 
    FOS.wFunc := FO_DELETE; 
    SourceLst := Directory + '\' + FileMask + #0; 
    FOS.pFrom := PChar(SourceLst); 
    if not DelSubDirs then 
    FOS.fFlags := FOS.fFlags OR FOF_FILESONLY; 
    FOS.fFlags := FOS.fFlags OR FOF_NOCONFIRMATION; 
    SHFileOperation(FOS); 
end; 

答えて

4

、追加のフラグとしてFOF_NOERRORUIを追加する必要があります。

さらに、ファイル操作の進捗に関する情報を完全に非表示にする場合は、代わりにFOF_NO_UIフラグを追加できます。

可能なフラグの詳細については、公式SHFileOperation() documentationで読むことができます。

+0

削除しようとしているファイルが別の操作でロックされている場合は、あなたの提案に従って 'FOF_NOCONFIRMATION'を' FOF_NO_UI'に変更したらどうなりますか? – Marcel

+0

@Marcelそれについてもっと知るために何かを試すようなものはありません。 ;) –

関連する問題