Недавно добавленные исходники

•  TDictionary Custom Sort  498

•  Fast Watermark Sources  866

•  3D Designer  1 795

•  Sik Screen Capture  1 451

•  Patch Maker  1 454

•  Айболит (remote control)  1 385

•  ListBox Drag & Drop  1 149

•  Доска для игры Реверси  21 087

•  Графические эффекты  1 328

•  Рисование по маске  1 267

•  Перетаскивание изображений  1 082

•  Canvas Drawing  958

•  Рисование Луны  795

•  Поворот изображения  752

•  Рисование стержней  800

•  Paint on Shape  485

•  Генератор кроссвордов  746

•  Головоломка Paletto  657

•  Теорема Монжа об окружностях  836

•  Пазл Numbrix  604

•  Заборы и коммивояжеры  834

•  Игра HIP  548

•  Игра Go (Го)  521

•  Симулятор лифта  541

•  Программа укладки плитки  503

•  Генератор лабиринта  559

•  Проверка числового ввода  516

•  HEX View  593

•  Физический маятник  521

•  Задача коммивояжера  553

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Как удалить файлы из корзины



- Как узнать существует ли файл?
- Выполнить процедуру удаления файла. Если во время выполнения этой процедуры возникла ошибка - значит файл не существует.


program del;

uses
  ShellApi;

//function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;

var
  T: TSHFileOpStruct;
  P: string;
begin
  P := 'C:\Windows\System\EL_CONTROL.CPL';
  with T do
  begin
    Wnd := 0;
    wFunc := FO_DELETE;
    pFrom := Pchar(P);
    fFlags := FOF_ALLOWUNDO
  end;
  SHFileOperation(T);
end.

Восстановление

Есть некоторые причуды, и Вы должны помнить о следующем:

  • Дайте полный путь для каждого файла. Не доверяйте текущей директории, даже если Вы ее изменили непосредственно перед вызовом функции. Функция WinAPI SHFileOperation не достаточно "умная" для использования текущей директории при отсутствии информации о предыдущей директории (для осуществления функции восстановления). Так, даже если используете флаг FOF_ALLOWUNDO, это не восстановит удаленные файлы из корзины, поскольку функция ничего не знает о предыдущем месторасположении файлов, и, таким образом, не сможет их восстановить файлы из корзины в их оригинальное месторасположение. Она просто удалит файлы из текущей директории.
  • Microsoft скорректировала документацию о члене pFrom. Новая редакция сообщает о подробностях работы в пакетном режиме: необходимо разделить имя каждого файла символом NULL (#0) и добавить к концу списка двойной символ NULL. Терминатор из двух символов NULL необходим в любом случае: работаете вы с одним файлом, или же используете пакетный режим. Иногда это работает и без терминатора, но чаще нет. Это связано с тем, что функции при работе с памятью считывает данные из памяти, располагающейся до терминатора, а поскольку длина строки может не совпадать с распределенной памятью, то данные, находящиеся после терминатора, просто не обрабатываются.

Пример правильного кодирования:


var
  FileList: string;
  FOS: TShFileOpStruct;
begin
  FileList := 'c:\delete.me'#0'c:\windows\temp.$$$'#0#0;
  { если Вы используете имена файлов в строковых переменных: }
  FileList := Filename1 + #0 + Filename2 + #0#0;
  FOS.pFrom := PChar(FileList);
  // бла бла бла
end;








Copyright © 2004-2022 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter   Ссылка на Telegram