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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2011, 11:27   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

полную программу, говорите?...


ну, извольте:
Код:
implementation
{$R *.DFM}

uses FileCtrl;

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;


procedure TForm1.Button1Click(Sender: TObject);
var
  sIn, path : string;
begin
  if Memo1.lines.Count < 1 then begin
    Application.MessageBox('Мемо вообще пуст. Делать нечего! Выходим...', 'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;
  sIn := Memo1.lines[0];
  if Pos('DEL ', UpperCase(sIn))<>1 then  begin
    Application.MessageBox('В первой строчке Мемо нет команды DEL! Выходим...', 'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;
  path:=copy(sIn, 5, length(sIn) - 5 +1);
  if Not DirectoryExists(path) then begin
    Application.MessageBox(PChar('Каталог '+path+' не найден! Выходим...'),
                             'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;
  if Application.MessageBox(Pchar('Вы хотите очистить каталог '+path+' ? '),
         'Подтверждение', MB_ICONQUESTION or MB_OKCANCEL) = IDOK then begin
      MyRemoveDir(path);
      Application.MessageBox('Удаление содержимого произведено!',
                      'Информация', MB_ICONINFORMATION or MB_OK);
  end;
end;
p.s. обратите внимание, что для подключения функции DirectoryExists потребовалось подключить модуль FileCtrl
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2011, 12:57   #12
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

огромное человеческое спасибо!
hacknet вне форума Ответить с цитированием
Старый 14.08.2011, 17:01   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.programmersforum.ru/showthread.php?t=20268
Это меньше писать чем классический вариант Сержа
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2011, 18:17   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Stilet
Виталий, если Вы про ShFileOperation с функцией FO_DELETE - то данный код (с рекурсией) делает немножко другое - MyRemoveDir удаляет содержимое папок, а сами папки остаются... Впрочем, не уверен, что hacknet это нужно (я про оставить пустую структуру папок)...
Кроме того, код с ShFileOperation сам не возьмёт имя удаляемой папки из Memo....

впрочем, согласен - знать и уметь применять разные "виды оружия" — это большой плюс.
Пусть интересующиеся (кто зайдёт в эту тему) знают, что задачу удаления папок можно и одной системной функцией выполнить, не обязательно перебирать рекурсивно все папки...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2011, 18:56   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
MyRemoveDir удаляет содержимое папок, а сами папки остаются
А я и не говорил что твой пример - некондишн. Я просто сказал что можно меньше кода трухнуть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2011, 13:40   #16
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
полную программу, говорите?...


ну, извольте:
Код:
implementation
{$R *.DFM}

uses FileCtrl;

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;


procedure TForm1.Button1Click(Sender: TObject);
var
  sIn, path : string;
begin
  if Memo1.lines.Count < 1 then begin
    Application.MessageBox('Мемо вообще пуст. Делать нечего! Выходим...', 'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;
  sIn := Memo1.lines[0];
  if Pos('DEL ', UpperCase(sIn))<>1 then  begin
    Application.MessageBox('В первой строчке Мемо нет команды DEL! Выходим...', 'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;
  path:=copy(sIn, 5, length(sIn) - 5 +1);
  if Not DirectoryExists(path) then begin
    Application.MessageBox(PChar('Каталог '+path+' не найден! Выходим...'),
                             'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;
  if Application.MessageBox(Pchar('Вы хотите очистить каталог '+path+' ? '),
         'Подтверждение', MB_ICONQUESTION or MB_OKCANCEL) = IDOK then begin
      MyRemoveDir(path);
      Application.MessageBox('Удаление содержимого произведено!',
                      'Информация', MB_ICONINFORMATION or MB_OK);
  end;
end;
p.s. обратите внимание, что для подключения функции DirectoryExists потребовалось подключить модуль FileCtrl
а можно ли сделать, запуск файла указанного полным путем в мемо... К примеру написать команду "ехе" и полный путь... Спасибо
hacknet вне форума Ответить с цитированием
Старый 03.09.2011, 14:57   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно. Winexec,CreateProcess,ShellExecute - все они любят запускать исполнимые файлы, но только ShellExecute может "запускать файл" в принципе. Поищи примеры по этим словам - у нас их было море
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2011, 16:25   #18
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Можно. Winexec,CreateProcess,ShellExecute - все они любят запускать исполнимые файлы, но только ShellExecute может "запускать файл" в принципе. Поищи примеры по этим словам - у нас их было море
это понятно меня интересует именно команда... Ну чтоб прописать „ехе с:\1.тхт” и если в мемо есть „ехе” то запустился файл...
hacknet вне форума Ответить с цитированием
Старый 03.09.2011, 21:18   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А что значит запустить файл с:\1.тхт? ShellExecute спокойно запустит редактор текстовых файлов (блокнот например) если вы этот путь параметром передадите. Или что-то другое имеется ввиду?
Код:
FileName:='с:\1.тхт';
ShellExecute(Application.Handle,'open',PChar(FileName),'',PChar(ExtractFilePath(FileName)),0);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.09.2011, 10:18   #20
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

может вы не правильно читаете мой вопрос) я имею ввиду если в МЕМО написано ”ехе и путь к любому файлу” то этот файл запуститься. ключевое слово ”ехе” если его нет то ничего не делать... Практически тоже самое что и с удалением... Посмотрите предыдущие посты с удалением!

Последний раз редактировалось hacknet; 04.09.2011 в 10:40.
hacknet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытые файлы и папки в OpenDialog Veiron Общие вопросы Delphi 6 05.03.2008 09:03
Как удалить файлы. Борис2 Паскаль, Turbo Pascal, PascalABC.NET 3 15.12.2007 16:00
Показывать-не показывать скрытые файлы и папки... Романнн Свободное общение 5 07.11.2007 13:16
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53
как удалить анти вирус( касперский 2006)если она не работает и ее не возможно удалить Alar Общие вопросы Delphi 0 29.10.2006 21:36