2009-06-12 18 views
9

olduğunu Yani, belirli bir dizinenasıl silinir dosyaları

Örnek içindeki desen eşleştirme tüm dosyaları silmek, Sen SHFileOperation kullanabilirsiniz DirectoryName

içinde
+0

Normal bir ifade kullanabilirsiniz. Desen eşleştirmesi için biraz googling yapın, RegEx benim uzmanlık alanım değil ama cehennem kadar güçlü. –

+2

(Dosya apis genellikle Regexes, sadece düz joker desteklemez. Tam regex kabukları ve betik dilleri için daha şeydir) –

cevap

22
procedure TForm1.Button1Click(Sender: TObject); 
begin 
    DeleteFiles(ExtractFilePath(ParamStr(0)),'*.jpg'); 
end; 

procedure DeleteFiles(APath, AFileSpec: string); 
var 
    lSearchRec:TSearchRec; 
    lPath:string; 
begin 
    lPath := IncludeTrailingPathDelimiter(APath); 

    if FindFirst(lPath+AFileSpec,faAnyFile,lSearchRec) = 0 then 
    begin 
    try 
     repeat 
     SysUtils.DeleteFile(lPath+lSearchRec.Name);  
     until SysUtils.FindNext(lSearchRec) <> 0; 
    finally 
     SysUtils.FindClose(lSearchRec); // Free resources on successful find 
    end; 
    end; 
end; 
+0

tüm –

+0

Teşekkür (lsearchrec fillchar gerek yoktur). Tam olarak aradığım şey tam da bu. – volvox

+0

* Her zaman doğru şekilde programlamak istiyorsanız FillChar yapın. Bu hiçbir şey yapamaz, ama bu iyi bir alışkanlıktır. Bir gün C gibi program yaparsanız, iyi alışkanlıklarınız olmasaydı * büyük * belaya girersiniz. Sen * her zaman * rekorun başlatılmamış olduğunu ve her zaman * belleğin her zaman 0 bayt ile ayarlanamayacağını düşünmelisin. FillChar fonksiyonunu geri getirmek, diğerlerinin kötü alışkanlıklar yerine iyi alışkanlıklarını göstermek zorundasınız. –

5

tüm * .jpg dosyalarını silin işlevi. SHFileOperation'ı kullanmanın güzel tarafı, dosyaları geri dönüşüm kutusuna silme seçeneğidir ve normal API animasyonlarını alırsınız, böylece kullanıcı neler olup bittiğini bilir. Downside silme Jeff'in kodundan biraz daha uzun sürecek.

Orada birkaç paket var. Bu ücretsiz sargıyı BP Yazılımından kullanıyorum. Tüm sarıcı dosyası sadece 220 satırdır ve okunması ve kullanılması kolaydır. Bunu bir bileşen olarak yüklemiyorum. Bu birimi projeme eklemek daha kolay olduğunu buldum ve sadece nesneyi gerektiği gibi oluşturun ve serbest bırakın.

Güncelleme: BP Yazılım sitesi için indirme linki artık geçerli değil. Bir older version on the Embarcadero website var.

TSHFileOp (1.3.5.1) (3 KB)
Mayıs 31, yeniden adlandırma veya geri dönüşüm-bin desteğiyle (silme, bir SHFileOperation API kopyalamak için sarıcı , hamledir 2006
TComponent) bir dosya sistemi nesnesi.

SHFileOperation için dosya adı parametresi MS DOS stili joker karakterlerini desteklemektedir. Yani böyle bileşeni kullanabilirsiniz:


     FileOps := TSHFileOp.Create(self); 

     FileOps.FileList.Add(DirectoryName + '\*.jpg'); 

     FileOps.HWNDHandle := self.Handle; 
     FileOps.Action := faDelete; 
     FileOps.SHOptions := 
      [ofAllowUndo, ofNoConfirmation, ofFilesOnly, ofSimpleProgress]; 
     FileOps.Execute; 

Genellikle, Windows tekrar sormuyor yüzden kendim kadar hep ofNoConfirmation bayrak geçmek "Emin misin" mesajını gösterir.

her jpg dosyasını silmek istemiyorsanız veya size yürütmek çağırmadan önce FileList dize listesine yaban kartları ile tam dosya adlarını veya farklı yollar ekleyebilir birden dizinleri silmek gerekir.

İşte MSDN Page for SHFileOperation
SHFileOperation'ın Windows Vista ile başlayan IFileOperation ile değiştirildiğini unutmayın. Windows Vista'da SHFileOperation'ı sorunsuz kullanmaya devam ettim.

+0

Bu başka bir adil çözüm ve doktora teşekkür ederim - TSHFileOp sarıcı ile denedim. – volvox

+0

Bağlantı öldü ... – kobik

4

Delphi daha yeni sürümlerinde, muhtemelen esas vb FindFirst, FindNext tamamlanmakta System.IOUtils sınıfları, kullanacağı:

procedure DeleteFilesMatchingPattern(const Directory, Pattern: string); 
    var FileName: string; 
begin 
    for FileName in TDirectory.GetFiles(Directory, Pattern) do TFile.Delete(FileName); 
end;