2009-12-16 12 views
7

używam tej procedury:Co robi ShFileOperation, gdy kosza jest pełny?

function MoveToRecycle(sFileName: widestring): Boolean; 
var 
    fos: TSHFileOpStructW; 
begin 
    FillChar(fos, SizeOf(fos), 0); 
    with fos do 
    begin 
    wnd := 0; 
    wFunc := FO_DELETE; 
    pFrom := PWideChar(sFileName + #0 + #0); 
    pTo := #0 + #0; 
    fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT; 
    end; 
    Result := (ShFileOperationW(fos) = 0); 
end; 

Co się stanie, jeśli kosz jest pełny, to return false lub usunąć plik na stałe?

Każda pomoc zostanie doceniona.

+0

Wciśnij kod w czterech polach, aby uzyskać prawidłowe wyświetlenie. –

+0

Nie wiedziałem, że Kosz może być "pełny". Jak to działa? –

+0

Przy okazji - fajna funkcja. Właściwie dobrze wiedzieć, jak przenieść się do kosza. Zawsze używałam funkcji "deletefile". –

Odpowiedz

3

Najlepszym sposobem, aby się tego dowiedzieć, jest wykonanie tego. Mój kosz powinien wynosić co najmniej 1 procent dysku. Stworzyłem garść dużych plików i użyłem twojej funkcji, aby przenieść je do kosza.

Czego się dowiem (na XP mimo wszystko) jest to, że funkcja zawsze przenosi je do kosza; ale usuwa trwale najstarszy usunięty plik. Tak więc pojawia się, gdy pojemnik na śmieci wypełnia się, stosuje podejście typu "pierwsze przyszło-pierwsze wyszło", aby zdecydować, który plik ma zostać uruchomiony.

Nie mogłem uzyskać funkcji zwracania fałszu. Być może utworzenie pliku jest zbyt duże dla przydzielonego kosza.

+0

Dzięki za wypróbowanie! To będzie bardzo niekorzystna wiadomość dla mojego klienta. – Irwan

+0

Jeśli tak ważne jest, aby klient przechowywał pliki w koszu, dlaczego nie po prostu usuwa limit kosza? – jpfollenius

+0

Jest zwykłym użytkownikiem, więc domyślam się, że nie wie o tym – Irwan