Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.08.2013, 01:41
Redddd Redddd вне форума
Прохожий
 
Регистрация: 18.02.2013
Сообщения: 40
Репутация: 10
По умолчанию Не удаляются файлы

Задача - удалить каталог. В нем много подкаталогов. Все удаляется, кроме одной папки. Какая может быть причина. Файлы не системные.
Вот функции, которыми пытаюсь удалять:
Код:
function DeleteDir(Dir: string): boolean;
var
  Found: integer;
  SearchRec: TSearchRec;
begin
  result := false;
  if IOResult <> 0 then
    ChDir(Dir);
  if IOResult <> 0 then
  begin
    ShowMessage('Не могу войти в каталог: ' + Dir);
    exit;
  end;
  Found := FindFirst('*.*', faAnyFile, SearchRec);
  while Found = 0 do
  begin
    if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
      if (SearchRec.Attr and faDirectory) <> 0 then
      begin
        if not DeleteDir(SearchRec.name) then
          exit;
        end
        else
          if not DeleteFile(SearchRec.name) then
          begin
            ShowMessage('Не могу удалить файл: ' + SearchRec.name+'!');
            exit;
          end;
        Found := FindNext(SearchRec);
      end;
  FindClose(SearchRec);
  ChDir('..');
  RmDir(Dir);
  result := IOResult = 0;
end;

Код:
procedure RemoveAll(path: string);
var
  sr: TSearchRec;
begin
  if FindFirst(path + '\*.*', faAnyFile, sr) = 0 then
  begin
    repeat
      if sr.Attr and faDirectory = 0 then
      begin
        DeleteFile(path + '\' + sr.name);
      end
      else
      begin
        if pos('.', sr.name) <= 0 then
          RemoveAll(path + '\' + sr.name);
      end;
    until
      FindNext(sr) <> 0;
  end;
  FindClose(sr);
  RemoveDirectory(PChar(path));
end;
Ответить с цитированием
  #2  
Старый 01.08.2013, 08:54
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

мне тоже лень разбираться в твоем коде, поэтому сделай так:
Код:
begin
  WinExec('cmd /c "rmdir /s /q d:\Downloads\fordel"', SW_HIDE);
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 01.08.2013, 10:06
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

а зачем эта проверка
if IOResult <> 0 then
ChDir(Dir);
Ответить с цитированием
  #4  
Старый 01.08.2013, 11:23
Redddd Redddd вне форума
Прохожий
 
Регистрация: 18.02.2013
Сообщения: 40
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
мне тоже лень разбираться в твоем коде, поэтому сделай так:
Код:
begin
  WinExec('cmd /c "rmdir /s /q d:\Downloads\fordel"', SW_HIDE);
end;

Нет желания использовать WinExec.
Плохой тон это.
Ответить с цитированием
  #5  
Старый 01.08.2013, 13:25
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Печаль

Цитата:
Сообщение от Redddd
Нет желания использовать WinExec.
CreateProcess?

Плохой тон это когда нет желания самому разобраться в своем же коде.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 01.08.2013, 13:46
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
uses
  ShellAPI,

var
  shfos: TSHFileOpStruct;
begin
  ZeroMemory(@shfos, SizeOf(TSHFileOpStruct));
  shfos.Wnd:=Handle;
  shfos.wFunc:=FO_DELETE;
  shfos.pFrom:='d:\Downloads\fordel'#0#0;
  shfos.fFlags:=FOF_SILENT or FOF_NOCONFIRMATION;
  SHFileOperation(shfos);
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Redddd (02.08.2013)
  #7  
Старый 01.08.2013, 20:56
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Redddd
Код:
          if not DeleteFile(SearchRec.name) then
          begin
            ShowMessage('Не могу удалить файл: ' + SearchRec.name+'!');
            exit;
          end;
Если файл удалить не удалось, вызываем RaiseLastOSError, не не тупое сообщение, по которому фиг что поймешь. Отучаемся быдлокодить!
Ответить с цитированием
  #8  
Старый 01.08.2013, 23:02
Redddd Redddd вне форума
Прохожий
 
Регистрация: 18.02.2013
Сообщения: 40
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
CreateProcess?

Плохой тон это когда нет желания самому разобраться в своем же коде.
Это не мой код.

Цитата:
Сообщение от Freeman
Если файл удалить не удалось, вызываем RaiseLastOSError, не не тупое сообщение, по которому фиг что поймешь. Отучаемся быдлокодить!
Это просто заготовка, не нервничай

Последний раз редактировалось M.A.D.M.A.N., 02.08.2013 в 00:36.
Ответить с цитированием
  #9  
Старый 02.08.2013, 12:36
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

А всё-таки, зачем эта проверка?
if IOResult <> 0 then
ChDir(Dir);
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter