Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 08:39   #1
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию Удаление файлов

Не пойму почему удаляет не все файлы
Код:
if FindFirst('_Q*.db', $23, FileName) = 0 then
  begin
    repeat
      DeleteFile(FileName.Name)
    until FindNext(FileName) <> 0;
  end;
я думаю, что ищет в одном каталоге, а мне надо что на всем диске. А как сделать не знаю

Последний раз редактировалось Liones; 19.05.2009 в 08:47.
Liones вне форума Ответить с цитированием
Старый 19.05.2009, 08:57   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

для этого надо рекурсивный поиск делать, на форуме показывали уже алгоритмы неоднократно.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 19.05.2009, 09:01   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

http://programmersforum.ru/showthrea...ght=TSearchRec
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 19.05.2009, 09:02   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Вот процедура поиска с подкаталогами
Код:
procedure TForm1.FindFile(Dir: string);
var
  SR: TSearchRec;
  FindRes: Integer;
  Kol:integer;
begin
  FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
  while FindRes = 0 do
  begin
    if ((SR.Attr and faDirectory) = faDirectory) and
      ((SR.Name = '.') or (SR.Name = '..')) then
    begin
      FindRes := FindNext(SR);
      Continue;
    end;

    // если найден каталог, то
    if ((SR.Attr and faDirectory) = faDirectory) then
    begin
      // входим в процедуру поиска с параметрами текущего каталога +
      // каталог, что мы нашли
      FindFile(Dir + SR.Name + '\\');
      FindRes := FindNext(SR);
      // после осмотра вложенного каталога мы продолжаем поиск
      // в этом каталоге
      Continue; // продолжить цикл
    end;

    ListBox1.Items.Add(SR.Name);
    FindRes := FindNext(SR);
  end;
  FindClose(SR);
end;
FaTaL вне форума Ответить с цитированием
Старый 20.05.2009, 07:46   #5
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Вот процедура поиска с подкаталогами
Код:
procedure TForm1.FindFile(Dir: string);
var
  SR: TSearchRec;
  FindRes: Integer;
  Kol:integer;
begin
  FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
  while FindRes = 0 do
  begin
    if ((SR.Attr and faDirectory) = faDirectory) and
      ((SR.Name = '.') or (SR.Name = '..')) then
    begin
      FindRes := FindNext(SR);
      Continue;
    end;

    // если найден каталог, то
    if ((SR.Attr and faDirectory) = faDirectory) then
    begin
      // входим в процедуру поиска с параметрами текущего каталога +
      // каталог, что мы нашли
      FindFile(Dir + SR.Name + '\\');
      FindRes := FindNext(SR);
      // после осмотра вложенного каталога мы продолжаем поиск
      // в этом каталоге
      Continue; // продолжить цикл
    end;

    ListBox1.Items.Add(SR.Name);
    FindRes := FindNext(SR);
  end;
  FindClose(SR);
end;
не работает
Liones вне форума Ответить с цитированием
Старый 20.05.2009, 07:54   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Вот тут :
Код:
FindFile(Dir + SR.Name + '\\');
Попробуй так :
Код:
FindFile(Dir + SR.Name + '\');
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 20.05.2009, 09:48   #7
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию

Код:
FindRes := FindFirst(Dir + '_Q*.db', faAnyFile, SR);
  while FindRes = 0 do
  begin
Вот здесь всегда FindRes<>0, поэтому цик не выполнятся и ничего не удаляется. Если поменять
Код:
FindRes := FindFirst(Dir + '_Q*.db', faAnyFile, SR);
  while FindRes <> 0 do
  begin
то зацикливается.
Liones вне форума Ответить с цитированием
Старый 20.05.2009, 10:45   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

У меня нормально всё работает.
FaTaL вне форума Ответить с цитированием
Старый 20.05.2009, 11:00   #9
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию

Кажется нашла. Все находит, но не удаляет.
Код:
DeleteFile(SR.Name);
А почему?
Liones вне форума Ответить с цитированием
Старый 20.05.2009, 13:29   #10
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от Liones Посмотреть сообщение
Кажется нашла. Все находит, но не удаляет.
Код:
DeleteFile(SR.Name);
А почему?
Так потому что ты указываешь удалять только имя файла. А путь где?
Сделай так DeleteFile (Dir + SR.Name)
FaTaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление файлов с расширением *.tmp maxi_mum Помощь студентам 4 03.04.2009 15:26
Удаление, файлов Vladya Помощь студентам 4 22.12.2008 22:40
Удаление невидимых файлов. Дикий Общие вопросы Delphi 34 14.05.2008 00:57
Удаление файлов Amery Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.05.2008 14:46