Что делает ShFileOperation, когда корзина заполнена?

Я использую эту процедуру:

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;

Что произойдет, если корзина будет заполнена, вернет ли она false или удалит файл навсегда?

Любая помощь будет оценена по достоинству.


person Irwan    schedule 16.12.2009    source источник
comment
Сделайте отступ в коде на четыре пробела, чтобы он отображался правильно.   -  person Anon.    schedule 16.12.2009
comment
Я не знал, что Корзина может быть заполнена. Как это работает?   -  person Mason Wheeler    schedule 16.12.2009
comment
Кстати - приятная функция. На самом деле хорошо знать, как перейти к корзине. Я всегда просто использовал функцию удаления файла.   -  person M Schenkel    schedule 16.12.2009
comment
Мейсон — вы можете установить размер корзины в процентах от вашего дискового пространства. Но мы узнали, что, по крайней мере, используя эту функцию, она никогда не заполняется, а вместо этого выталкивает самые старые удаленные файлы, когда свободного места больше не остается.   -  person M Schenkel    schedule 16.12.2009
comment
Кстати, вы трижды завершаете путь нулем. У вас на один нуль больше, чем вам нужно.   -  person David Heffernan    schedule 13.11.2013


Ответы (1)


Лучший способ узнать это сделать это на самом деле. Сделал мою корзину не менее 1 процента диска. Создал кучу больших файлов и использовал вашу функцию, чтобы переместить их в корзину.

Что я узнаю (во всяком случае, на XP), так это то, что функция всегда перемещает его в корзину; но навсегда удаляет самый старый удаленный файл. Таким образом, кажется, что когда корзина заполняется, она использует подход типа «первым пришел - первым вышел», чтобы решить, какой файл загрузить.

Мне не удалось заставить функцию возвращать false. Возможно, создание файла слишком большого для выделенной корзины делает это.

person M Schenkel    schedule 16.12.2009
comment
Если для вашего клиента так важно хранить файлы в своей корзине, почему бы ему просто не удалить лимит корзины? - person jpfollenius; 16.12.2009
comment
Он обычный пользователь, поэтому я думаю, что он не знает об этом. - person Irwan; 17.12.2009