Чистящее
средство
М
Сергей ПАРИЖ СКИЙ
В ообщ е то я н е пользую сь разны м и програм м ам и д л я очистки системы, так как считаю, что прощ е
поставить з а пару минут новую систему и з об раза (имиджа). Но больш инст во пользоват елей ОС W in-
d ow s использую т програм м ы д л я очистки системы, такие как N orton Utilities, RegC leaner и другие подобны е
им. М не захот елось написать свою утилиту, которая тоже будет делать что-то п о лезн о е д л я системы.
Сегодня м ы напиш ем прилож ение, которое будет искать вр ем енны е и ненуж ные ф айлы с расш ирениям и
.tmp, Ьак
и
.old,
а затем удалять в с е найденное и выводить отчет о результатах очистки системы.
System СІеанег
Н
а вы можете увидеть полностью готовую форму. Это три
компонента из вкладки Standard:
ListBox, Edit
и
But-
ton.
В поле для ввода пользователь будет вводить путь
к каталогу W indows. Вы можете убрать поле для ввода,
положившись на то, что у всех пользователей путь будет
C:\Windows. Н о лучше так не делать: у пользователей W in-
dows 2 k/N T путь к системному каталогу по умолчанию —
C:\WINNT, а при установке Windows 95/98/М Е предоставляется
возможность изменить название папки. Лучше просто изменить
свойство
Text
компонента
editl
и написать
C:\windowsV
Заметьте, что последний символ — обратная черта. Это
обязательно, иноче программа не будет работать. Если ее
не поставить, то при поиске будет искаться не C:\Windows\1 imp,
а C:\Windowsl.tmp. У кнопки измените только свойство
Cap-
tion,
а
ListBox
можно оставить без изменений. Для формы
измените
Caption
на что-то более привлекательное. Свойство
Position
установите
в poDesktopCenter,
а для
Border-
Style
выберите
bsDialog.
Так как нам понадобится проводить поиск во вложенных
каталогах, придется делать вложенные циклы и использовоть
р е ку р с и ю . Рекурсия — это когдо процедура или функция
обращается сама к себе. Так как ном не надо возвращать
никаких значений, мы будем использовать не функцию, а
процедуру. Объявлять и писоть процедуру нам придется
самостоятельно. Это будет публичная процедура, так что
объявлять мы ее будем в разделе public:
procedure Cleaner (Catalog: String);
У нас будет одна глобальная переменная — чтобы не
забыть, объявите ее ниже в разделе v a r : d e l: in te g e r . О на
будет служить для подсчета удаленных файлов.
В самом низу перед ключевым словом end мы напишем
нашу процедуру c le a n e r:
procedure TForml. Cleaner (Catalog: String) ;
//название процедуры и ее единственный аргумент —
катал ог, в котором производится очистка
var
і: integer; //
счетчик для циклов
temp: integer;
//вычисление и сравнение расширений
ext: string;
fn: TSearchRec; /
/хранит характеристики найденного
файла (имя, размер.
..)
Finds:Integer; /
/определяет, найден ли файл
begin
Finds:=FindFirst(Catalog+'*
,
faAnyFile,fn);
/ /поиск в сех файлов
While Finds=0 do /
/цикл будет продолжаться до тех
пор, пока будут находиться файлы
begin
//если найден катал ог, то проверить, не является ли
он . или . . (как в ДОСе)
if ((fn.Attrand faDirectory)=faDirectory) and
((fn.Name='.')or(fn.Name='.
.')) then
begin
Finds:=FindNext(fn) ;
//искать дальше
Continue;
//продолжить цикл
end;
if ((fn.Attr and faDirectory)=faDirectory) then
/ / если найден каталог»,
begin
Cleaner (Catalog+fn.Name*' \ '); //.
..заходим и
проверяем в с е , что находится в нем
Finds: =FindNext ( fn) ;
Continue;
end;
//вычисляем временные файлы
for i: =2 downto 0 do begin
temp:=length(fn.Name)-i;
ext:=ext+fn.Name[temp];
end;
i f (e x t = 't m p ') o r (e x t = ' o l d ' ) o r ( e x t= 'b a k ') th e n
//проверка на расширения временных файлов
begin
DeleteFile(Catalog*fn.Name); /
/Удаляем файл
ListBoxl.Items.Add(Catalog+fn.Name
) ; //Выводим
путь к найденному файлу пользователя
del: =del+l; / /
пополняем счетчик удаленных файлов
end;
ext : =
Finds:=FindNext(fn); /
/продолжаем и скать далее
end;
FindClose(fn) ; /
/после завершения поисков
освобождаем память
end;
Для поиска файлов мы использовали две функции —
Fin-
First,
которая ищет файл по шаблону, и
FindNext,
которая
продолжает начатый поиск. Синтаксис комонды
FindFirst
довольно прост
FindFirst (Каталог_и_шаблонлля_поиска,
атрибуты_файла, переменнаятипаТЗеагсИЯес
). С первым
аргументом, думаю, все понятна. Второй аргумент может
принимать такие значения:
faReadOnly
— только чтение
faHidden
— скрытый
faSysFile
— системный
faVolumelD
— метка диска
faDirectory
— каталог
faArchive
— архивный
faAnyFile
— все файлы
Не обязательно выбирать один атрибут,
их м ожно
комбинировать. Например,
faAnyFile-Directory-faHid-
den
означает «все файлы, кроме каталогов и скрытых файлов».
Для противоположного эффекта следует соединять их плюсами,
например, при
faHidden+faArchive
будут искоться только
архивные и скрытые файлы. Переменную
fn
мы объявили как
TSearchRec,
она выступает третьим аргументом и получает
информацию о найденном файле. За информацией к ней
м ож но обращ аться через
fn.name; fn.size
определяет
размер найденного файла.
Вторая функция для продолжения поиска —
FindNext.
В
качестве оргумента получает переменную
fn,
в которой
находится информация о файле, на котором был остоновлен
^
Окончание на стр. АЗ
№ 46/321 15 ноября-22 ноября 2004
предыдущая страница 38 Мой Компьютер 2004 46 читать онлайн следующая страница 40 Мой Компьютер 2004 46 читать онлайн Домой Выключить/включить текст