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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.06.2010, 14:13
603vvn 603vvn вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 4
Репутация: 10
По умолчанию Необходимо подредактировать код

Есть код который удаляет всё содержимое из указанной папки и саму папку, а мне нужно что бы саму папку он не удалял а только содержимое, помогите пожалуйста.

Заранее благодарен!!!.

Код:
function MyRemoveDir(sDir : string) : Boolean;
var
  iIndex: Integer;
  SearchRec: TSearchRec;
  sFileName: string;
begin
  Result := False;
  sDir := sDir + '\*.*';
  iIndex := FindFirst(sDir, faAnyFile, SearchRec);

  while iIndex = 0 do
  begin
    sFileName := ExtractFileDir(sDir)+'\'+SearchRec.name;
    if SearchRec.Attr = faDirectory then
    begin
      if (SearchRec.name <> '' ) and (SearchRec.name <> '.') and
      (SearchRec.name <> '..') then
        MyRemoveDir(sFileName);
    end
    else
    begin
      if SearchRec.Attr <> faArchive then
        FileSetAttr(sFileName, faArchive);
      if not DeleteFile(sFileName) then
        ShowMessage('Could NOT delete ' + sFileName);
    end;
    iIndex := FindNext(SearchRec);
  end;

  FindClose(SearchRec);
  RemoveDir(ExtractFileDir(sDir));
  Result := True;
end;
Ответить с цитированием
  #2  
Старый 17.06.2010, 14:54
Rjkzy Rjkzy вне форума
Прохожий
 
Регистрация: 15.06.2010
Адрес: дома
Сообщения: 34
Репутация: 10
По умолчанию

убери RemoveDir(ExtractFileDir(sDir));
Ответить с цитированием
  #3  
Старый 17.06.2010, 14:56
603vvn 603vvn вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Rjkzy
убери RemoveDir(ExtractFileDir(sDir));

Уже побывал, но тогда удаляются только файлы, а папки остаются
Ответить с цитированием
  #4  
Старый 17.06.2010, 15:04
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

железобетонный вариант:
после очистки создай заного каталог и все.

либо передавай в функцию еще один параметр, имя главной директории которую удалять не нужно и
проверяй если sDir<>MainsDir то RemoveDir(ExtractFileDir(sDir));
Ответить с цитированием
  #5  
Старый 17.06.2010, 15:10
Rjkzy Rjkzy вне форума
Прохожий
 
Регистрация: 15.06.2010
Адрес: дома
Сообщения: 34
Репутация: 10
Хорошо

Цитата:
Сообщение от Black Raider
железобетонный вариант:
после очистки создай заного каталог и все.

либо передавай в функцию еще один параметр, имя главной директории которую удалять не нужно и
проверяй если sDir<>MainsDir то RemoveDir(ExtractFileDir(sDir));
+1 к логике
Ответить с цитированием
  #6  
Старый 17.06.2010, 15:12
603vvn 603vvn вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Raider
железобетонный вариант:
после очистки создай заного каталог и все.

либо передавай в функцию еще один параметр, имя главной директории которую удалять не нужно и
проверяй если sDir<>MainsDir то RemoveDir(ExtractFileDir(sDir));

Заново каталог, я уже думал, но на папку стоят определённые права и это не подходит.

А вот по подробней про функцию которую передать необходимо не могли бы рассказать?
Ответить с цитированием
  #7  
Старый 17.06.2010, 15:18
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

теперь при первом вызове функции передавай 2-а параметра.
должно сработать.
только один минус у этого варианта, если имя подпапки будет такое же он ее оставит.

Код:
function MyRemoveDir(sDir,noDelDir : string) : Boolean;
var
  iIndex: Integer;
  SearchRec: TSearchRec;
  sFileName: string;
begin
  Result := False;
  sDir := sDir + '\*.*';
  iIndex := FindFirst(sDir, faAnyFile, SearchRec);

  while iIndex = 0 do
  begin
    sFileName := ExtractFileDir(sDir)+'\'+SearchRec.name;
    if SearchRec.Attr = faDirectory then
    begin
      if (SearchRec.name <> '' ) and (SearchRec.name <> '.') and
      (SearchRec.name <> '..') then
        MyRemoveDir(sFileName,noDelDir);
    end
    else
    begin
      if SearchRec.Attr <> faArchive then
        FileSetAttr(sFileName, faArchive);
      if not DeleteFile(sFileName) then
        ShowMessage('Could NOT delete ' + sFileName);
    end;
    iIndex := FindNext(SearchRec);
  end;

  FindClose(SearchRec);
  if sDir<>noDelDir then 
  RemoveDir(ExtractFileDir(sDir));
  Result := True;
end;
Ответить с цитированием
  #8  
Старый 17.06.2010, 15:21
603vvn 603vvn вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 4
Репутация: 10
По умолчанию

Всем спасибо за попытку помочь!!! Уже разобрался Вот выложу код может кому нибудь пригодится: необходимо было добавить строку, за что огромное спасибо Black Raider.

Код:
function MyRemoveDir(sDir : string) : Boolean;
var
  iIndex: Integer;
  SearchRec: TSearchRec;
  sFileName: string;
begin
  Result := False;
  sDir := sDir + '\*.*';
  iIndex := FindFirst(sDir, faAnyFile, SearchRec);

  while iIndex = 0 do
  begin
    sFileName := ExtractFileDir(sDir)+'\'+SearchRec.name;
    if SearchRec.Attr = faDirectory then
    begin
      if (SearchRec.name <> '' ) and (SearchRec.name <> '.') and
      (SearchRec.name <> '..') then
        MyRemoveDir(sFileName);
    end
    else
    begin
      if SearchRec.Attr <> faArchive then
        FileSetAttr(sFileName, faArchive);
      if not DeleteFile(sFileName) then
        ShowMessage('Could NOT delete ' + sFileName);
    end;
    iIndex := FindNext(SearchRec);
  end;

  FindClose(SearchRec);
  
  If sDir <> MainsDir then

  RemoveDir(ExtractFileDir(sDir));
  Result := True;
end;
Ответить с цитированием
  #9  
Старый 17.06.2010, 15:26
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

да не за что.
только если подпапка будет с именем главной папки она не удалится.
поэтому лучше все таки создавать снова
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter