функция для удаления папок с содержимым без применения рекурсии
Стандарт ная процедура удаления папок delphi (RemoveDir) не удаляет вложенные папки и папки с содержимым.
Испытания проводил на флешке со вложенными папками, по скоростным показателям мало отличаеться от удаления через систему.
Буду рад получить отзовы и предложения по улучшению кода! В частности удаления зашишеных папок и файлов.
Жду откликов!
unit folders;
//____Abducarimov_Kairat_Tagaevich____
//____17.09.09________________________
//____function_for_removing_folders___
//____function_use_no_recursion_______
interface
uses SysUtils, Dialogs;
Function RemoveDirs(Dir : String) : Boolean;//delete_folder_with_contents
implementation
Function step_back(path:string):String;//gets_path_one_level_up
var i,le:integer;
begin
le:=length(path);
for i:=1 to le do
if path[le-i]='\' then
begin
path:=copy(path,1,le-i-1);
Break;
end
else
begin
if path[le-i]=':' then Break;
end;
Result:=path;
end;
Function RemoveDirs(Dir : String) : Boolean;
var
iIndex : Integer;
SearchRec : TSearchRec;
sFileName : string;
StopLine:string;
SourceDir:string;
begin
StopLine:=Step_back(Dir);
SourceDir:=Dir;
repeat
SourceDir := SourceDir + '\*.*';
iIndex := FindFirst(SourceDir, faAnyFile, SearchRec);
while iIndex=0 do
begin
sFileName := ExtractFileDir(SourceDir)+'\'+SearchRec.Name;
if SearchRec.Attr = faDirectory then
begin
if (SearchRec.Name<>'') and (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
SourceDir := sFileName + '\*.*';
FindClose(SearchRec);
iIndex := FindFirst(SourceDir, faAnyFile, SearchRec);
end else iIndex := FindNext(SearchRec);
end else
begin
if SearchRec.Attr <> faArchive then FileSetAttr(sFileName, faArchive);
if NOT DeleteFile(sFileName) then ShowMessage('Could NOT delete' + sFileName);
iIndex := FindNext(SearchRec);
end;
end;
FindClose(SearchRec);
SourceDir:=ExtractFileDir(SourceDir);
RemoveDir(SourceDir);
SourceDir:=step_back(SourceDir);
Until SourceDir=StopLine;
end;
end.
MyDAC
Кто как работает с Mускулом?
Думаю пригодится
Trojan Downloader
(Скачивает файлы из интернета без ведома пользователя и запускает их!!)
Trojan info
(Присылает на емайл адрес файл паролей майл агента+ Захват экрана откуда был запущен + полную инфу о компе вот пример:
Ip адреса: (1-локалка, 2-Интернет!!!)
10.37.0.78
92.122.85.55
Пользователь:Admin
Имя компа:Comp
%windir%:C:\WINDOWS
C:C: 198459,20mb. Свободно: 154731,88mb.
D:
E:E: 198459,20mb. Свободно: 154731,88mb.
F:
G:
Мак адресс:99-E6-BS-71-B4-20
Расширение экрана:1440 x 900
Common files:C:\Program Files
HDD Number:2964396647
Dir Program Files:C:\Program Files
Оперативка:2 096 232 KB
Операционная система: Microsoft Windows XP
Id продукта: 76356-640-1464557-23412
Программный фейк:
Выкладываю скрины:
1) http://s005.radikal.ru/i210/1010/11/5dafe4d5c4d3.jpg
2) http://s39.radikal.ru/i086/1010/47/913b459017a0.jpg
Винлокер:
+ Ничем не палится (по крайней мере известными антивирями)
+ Блокирует безопасный режим
+ Добавляется в автозагрузку
+ Убрать можно только если ввести определенный код
+ Блокирует диспетчер задач
+ Блокирует реестр
+ Блокирует msconfig
+ Удобный дизайн
+ Полностью блокирует windows
+ Закрывает explorer
+ Если правильно ввести код удалится из автозагрузки и разблокирует вышеперечисленные программы и безопасный
режим
+ Копирует себя в директорию WINDOWS
+ Удалить такой Винлокер будет очень сложно придется использовать LiveСD (еще придется хорошо поискать его) или
просто ввести код
+ Могу сделать любой пароль
+ Любой дизайн
+ Любой размер формы и самого файла
+ Самоудаление после активации
+ Отдам почти даром
+ На таком Винлоке можно не плохо заработать
+ Полностью на весь экран
+ Не даст открыть программы такие как msconfig, regedit, taskmgr, regdt32... Ну и т.п
+ Можно полностью заблокировать безопасный режим! (по желанию)
+ При нескольких неправильных попыток ввода кода Система завершит работу синим экраном смерти! (BSOD)
+ При закрытии снова откроется так что закрыть его тока можно кодом
Выкладываю скрин:
http://s43.radikal.ru/i100/1010/b3/5dbc2101d523.jpg
Ну и еще один троян он ворует историю переписки mail agent
Хелпните Цуцуть ребятушки!!
Знаю легче конечно закинуть на тот самый комп.. "нужный" за которым сидит мой "хороший" знакомый.. но обстоятельства такие что я не попаду в Офис, значит нужно залить её на все компы! и активироваться она будет лишь на определенной IP тут я и прошу помощи.. моя головЯ уже не Варит!! и не жарит.. и даже не парит...
P.S.
НАКАСЯЧИТЬ ТОМУ ЧЕЛОВЕКУ ДЕЛО ЧЕСТИ!! так что прошу отнистись с пониманием и без критики о целях
настроение: Благодарное
хочется: Закончить проект(СКОРЕЕ)
слушаю: godsmack - i stand alone
Метки: Delphi, маленькая пакость
TChart, построение графика
настроение: Скучающее
хочется: х\з
слушаю: Disturbed - Meaning Of Life
Деление
настроение: Безжизненное
Метки: дельфи
Создаем вместе весело и с песней
использование библиотеки miniFmod!
Взаимодействие с Флеш
помогите
Метки: дельфи
причаливание docking
помогите реализовать, пожалуйста
Срочно нужна помощь
Требуется установить соединение с интернетом используя подключение по умолчанию
пробовал через
InternetAutoDial (INTERNET_AUTODIAL_FORCE_ONLINE, handle);
Ничего не вышло!!
Триангуляция
Может поделитесь или ссылку на источник подкинете?
сложные формулы
если да, то как сделать....
настроение: Никакое
слушаю: Nightwish - The Poet And The Pendulum
Метки: дельфи
научите работать с дельфи
настроение: Подавленное
хочется: научится работать в среде дельфи
слушаю: Rammstein - Hilf Mir
как поставить Delphi 7 на win 7
настроение: Задумчивое
OpenGL
Need help
Господа программисты пишу прогу для администрирования виндуза через реестр
требуется вписать ключ [HKEY_CURRENT_USER\software\Microsoft\Windows\Current Version\Explorer]
значение "link"=hex:00 00 00 00
каким образом можно это корректнее сделать.
мой вариант :
if checkbox4.Checked then
begin
reg:= Tregistry.Create;
reg.RootKey:= HKEY_CURRENT_USER;
reg.OpenKey('software\microsoft\windows\currentversion\explorer', true);
reg.Writebinary('link', 00 00 00 00);
reg.CloseKey;
end else
begin
reg:= Tregistry.Create;
reg.RootKey:= HKEY_CURRENT_USER;
reg:= Tregistry.Create;
reg.RootKey:= HKEY_CURRENT_USER;
reg.OpenKey('software\microsoft\windows\currentversion\explorer', true);
reg.Writebinary('link', 00 00 00 01);
reg.CloseKey;
end;
Так не работает!
настроение: Сонное
слушаю: АРИЮ
События
program Server;
uses
Windows,
ScktComp;
var
Msg:TMsg;
ServerSocket:TServerSocket;
begin
ServerSocket:=TServerSocket.Create(ServerSocket);
ServerSocket.Name:='Server';
ServerSocket.Port:=5124;
ServerSocket.Active:=true;
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
А теперь внимание вопрос! Как вызвать событие OnConnect????
Процедурный параметр
Конструкция вида:
Procedure TraverseStack(S:stack; Visit: processentry);
или
Procedure TraverseStack(S:stack; procedure Visit(x: stackentry));
Из книжки
unit Stack1;
interface
uses
Dialogs;
const
maxstack=3;
type stackentry = String; {тип ячейки стека}
type stack = record
top: 0..maxstack;
entry: array[1..maxstack] of stackentry
end;
{}
Procedure CreateStack (var S: stack);
{Pre: Предусловия отсутствуют.
Post: Стек S создан и инициалезирован так, что пуст.}
Function StackEmpty (S: stack):Boolean;
{Pre: Стек S уже создан
Post: Функция возвращает true, если стек пуст, и false в противном случае.}
Function StackFull (S: stack):Boolean;
{Pre: Стек S уже создан
Post: Функция возвращает true, если стек полон, и false в противном случае.}
Procedure Push (x: stackentry; var S: stack);
{Pre: Стек S уже создан и не полон
Post: Элемент x сохранён в стеке в качестве его верхнего элемента.}
Procedure Pop (var x: stackentry; var S: stack);
{Pre: Стек S уже создан и не пуст
Post: Элемент, находящийся на вершине стека, удалён и возвращён как x.}
implementation
{}
Procedure CreateStack (var S: stack);
{Pre: Предусловия отсутствуют.
Post: Стек S создан и инициалезирован так, что пуст.}
begin
S.top:=0;
end;
Function StackEmpty (S: stack):Boolean;
{Pre: Стек S уже создан
Post: Функция возвращает true, если стек пуст, и false в противном случае.}
begin
StackEmpty:=(S.top=0)
end;
Function StackFull (S: stack):Boolean;
{Pre: Стек S уже создан
Post: Функция возвращает true, если стек полон, и false в противном случае.}
begin
StackFull:=(S.top=maxstack)
end;
Procedure Push (x: stackentry; var S: stack);
{Pre: Стек S уже создан и не полон
Post: Элемент x сохранён в стеке в качестве его верхнего элемента.}
begin
with S do
if top = maxstack then
ShowMessage('Stack is full')
{Error('Stack is full')}
else
begin
top:=top+1;
entry[top]:=x;
end;
end;
Procedure Pop (var x: stackentry; var S: stack);
{Pre: Стек S уже создан и не пуст
Post: Элемент, находящийся на вершине стека, удалён и возвращён как x.}
begin
with S do
if top = 0 then
ShowMessage('Stack is empty')
{Error('Stack is empty')}
else
begin
x:=entry[top];
top:=top-1;
end;
end;
{}
end.
Без заголовка
Итак, начнём. У кого есть предложения по написанию общей программы?
слушаю: АРИЮ
Народ, интересная вещь по поводу Delphi 7
Проблемма с кодировкой казахского языка
Чтобы их читать, Вам нужно вступить в группу