Удаление ненужных временных файлов с жесткого диска

Удаление ненужных временных файлов с жесткого диска

В результате некорректного завершения приложений на жестком диске часто остаются "бесхозные" временные файлы (с расширением tmp), которые затем приходится удалять вручную. Весьма удобно было бы удалять все такие файлы сразу со всего жесткого диска, не заботясь о том, в каких каталогах они находятся. Используя стандартные средства операционной системы, можно сначала с помощью пункта Найти (Find) меню Пуск (Start) составить список всех временных файлов (рис. 5.9), затем выделить все файлы в этом списке и нажать комбинацию клавиш <Shift>+<Delete> (удаление файлов без помещения в Корзину).

Однако если хотя бы один из временных файлов будет занят каким-либо приложением, то в доступе к нему будет отказано и процесс удаления прервется (рис. 5.10).

Поэтому для удаления с жесткого диска всех временных файлов мы напишем сценарий DelTmp.js (основная идея, которая используется в данном сценарии, позаимствована из статьи [6]).

Алгоритм работы сценария состоит в следующем:

? в Блокноте (notepad.exe) создается новый файл для отображения в нем результатов работы;

? на диске D: просматриваются подкаталоги всех уровней вложенности;

? в каждом подкаталоге ищутся все временные файлы с расширением tmp;

? для каждого найденного временного файла производится попытка удаления. В случае успеха в Блокноте печатается путь к файлу и слово "OK", если же удаляемый файл занят, то печатается путь к файлу и слово "Busy" ("Занят");

? после просмотра всех каталогов в Блокноте печатается общее количество найденных временных файлов (рис. 5.11).

Рис. 5.9. Список всех временных файлов на диске D:

Рис. 5.10. Ошибка, возникающая при попытке удалить занятый файл 

Итак, наиболее важными в сценарии являются: функция DelFilesInFolder(Fold, SExt), в которой происходит попытка удаления в каталоге Fold всех файлов, имеющих расширение SExt, и рекурсивная (т.е. содержащая обращение к самой себе) функция LoopSubFolders(Fold), в которой происходит вызов функции DelFilesInFolder для подкаталогов каталога Fold.

Рис. 5.11. Результат работы сценария DelTmp.js

Рассмотрим сначала функцию DelFilesInFolder(Fold, SExt). Здесь сначала создается объект Enumerator с именем Files для доступа к коллекции всех файлов в каталоге Fold:

var Files, s, SPath, FileExt, Status;

Files=new Enumerator(Fold.Files);

после чего все элементы коллекции просматриваются в цикле while:

s="";

//Цикл по всем файлам

while (!Files.atEnd()) {

 …

 Files.moveNext(); //Переходим к следующему файлу

}

Для текущего файла в коллекции выделяется его расширение, которое преобразуется к верхнему регистру:

//Определяем путь к файлу

SPath=Files.item().Path;

//Выделяем расширение файла

FileExt=FSO.GetExtensionName(SPath).toUpperCase();

В случае совпадения расширения FileExt с расширением SExt в блоке try…catch производится попытка удаления текущего файла:

ColTmp++; //Увеличиваем счетчик файлов для удаления

try {

 Status="Ok";

 //Пытаемся удалить файл

 Files.item().Delete();

} catch (e) {

 //Обрабатываем возможные ошибки

 if (е != 0) {

  //Произошла ошибка при удалении файла

  Status="Busy";

 }

}

Таким образом, в переменной Status будет записан результат удаления файла: "OK" в случае успеха, и "Busy" в том случае, если удаляемый файл занят другим приложением. После этого полный путь к удаляемому файлу и значение переменной Status печатаются в окне Блокнота с помощью метода SendKeys объекта WshShell. Здесь только нужно учесть, что в имени файла могут встретиться символы, имеющие специальный смысл для метода SendKeys, поэтому предварительно нужно соответствующим образом заменить такие символы в имени файла:

//Заменяем специальные символы в названии файла

SPath=SPath.replace("~", "{-}");

SPath=SPath.replace("+", "{+}");

SPath=SPath.replace("^", "{^}");

SPath=SPath.replace("%", "{%}");

//Посылаем название файла и результат его удаления в Блокнот

WshShell.SendKeys(SPath+"{TAB}"+Status+"~");

//Приостанавливаем сценарий на 0,5 сек

WScript.Sleep(500);

Перейдем теперь к описанию функции LoopSubFolders(Fold). Сначала в этой функции удаляются временные файлы в каталоге Fold:

//Удаляем временные файлы из каталога Fold

DelFilesInFolder(Fold, ExtForDel);

Затем происходит удаление файлов во всех подкаталогах каталога Fold, причем делается это с помощью обращения для каждого подкаталога к той же функции LoopSubFolders:

//Создаем коллекцию подкаталогов

SubFolders = new Enumerator(Fold.SubFolders);

//Цикл по всем подкаталогам

while (!SubFolders.atEnd()) {

 //Вызываем рекурсивно функцию LoopSubFolders

 LoopSubFolders(SubFolders.item());

 //Переходим к следующему подкаталогу

 SubFolders.moveNext();

}

Полный текст сценария DelTmp.js приведен в листинге 5.17.

Листинг 5.17. Удаление всех временных файлов на диске D:

/*******************************************************************/

/* Имя: DelTmp.js                                                  */

/* Язык: JScript                                                   */

/* Описание: Удаление временных файлов во всех подкаталогах        */

/*           текущего каталога                                     */

/*******************************************************************/

//Объявляем глобальные переменные

var WshShell,FSO,Folder,

 ColTmp=0,        //Счетчик файлов для удаления

 ExtForDel="tmp"; //Расширение файлов, подлежащих удалению

//Рекурсивная функция для удаления временных файлов в каталоге Fold

function LoopSubFolders(Fold) {

 var SubFolders;

 //Удаляем временные файлы из каталога Fold

 DelFilesInFolder(Fold,ExtForDel);

 //Создаем коллекцию подкаталогов

 SubFolders = new Enumerator(Fold.SubFolders);

 //Цикл по всем подкаталогам

 while (!SubFolders.atEnd()) {

  //Вызываем рекурсивно функцию LoopSubFolders

  LoopSubFolders(SubFolders.item());

  //Переходим к следующему подкаталогу

  SubFolders.moveNext();

 }

}

//Функция для удаления файлов с расширением SExt в каталоге Fold

function DelFilesInFolder(Fold,SExt) {

 //Объявляем переменные

 var Files,s,SPath,FileExt,Status;

 //Создаем коллекцию всех файлов в каталоге Fold

 Files=new Enumerator(Fold.Files);

 s="";

 //Цикл по всем файлам

 while (!Files.atEnd()) {

  //Определяем путь к файлу

  SPath=Files.item().Path;

  //Выделяем расширение файла

  FileExt=FSO.GetExtensionName(SPath).toUpperCase();

  //Сравниваем расширение файла с расширением SExt

  if (FileExt==SExt.toUpperCase()) {

   ColTmp++; //Увеличиваем счетчик файлов для удаления

   try {

    Status="Ok";

    //Пытаемся удалить файл

    //Files.item().Delete();

   } catch (e) { //Обрабатываем возможные ошибки

    if (e != 0) {

     //Произошла ошибка при удалении файла

     Status="Busy";

    }

   }

   //Заменяем специальные символы в названии файла

   SPath=SPath.replace("~","{~}");

   SPath=SPath.replace("+","{+}");

   SPath=SPath.replace("^","{^}");

   SPath=SPath.replace("%","{%}");

   //Посылаем название файла и результат его удаления

   //в Блокнот

   WshShell.SendKeys(SPath+"{TAB}"+Status+"~");

   //Приостанавливаем сценарий на 0,5 сек

   WScript.Sleep(500);

  }

  Files.moveNext();  //Переходим к следующему файлу

 }

}

/*******************  Начало  **********************************/

//Создаем объект WshShell

WshShell=WScript.CreateObject("WScript.Shell");

//Запускаем Блокнот

theNotepad = WshShell.Exec("Notepad");

//Приостанавливаем сценарий на 0,5 сек

WScript.Sleep(500);

//Активизируем окно Блокнота

WshShell.AppActivate(theNotepad.ProcessID);

//Создаем объект FileSystemObject

FSO=WScript.CreateObject("Scripting.FileSystemObject");

//Определяем каталог, с которого будет начато удаление файлов

Folder = FSO.GetFolder("D:\");

//Вызываем функцию LoopSubFolder для каталога Folder

LoopSubFolders(Folder);

//Формируем информацию о количестве обработанных файлов

SItog="Total: "+ColTmp+ " file(s)";

//Посылаем в Блокнот итоговую информацию

WshShell.SendKeys(SItog);

/*************  Конец *********************************************/

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ЛОГИЧЕСКАЯ СТРУКТУРА ЖЕСТКОГО ДИСКА

Из книги Microsoft Office автора Леонтьев Виталий Петрович

ЛОГИЧЕСКАЯ СТРУКТУРА ЖЕСТКОГО ДИСКА Для того чтобы наконец начать свою работу в качестве информационного амбара, жесткий диск должен пройти, как минимум, два испытания: создание на вашем винчестере разделов и логических дисков и


Дефрагментация жесткого диска

Из книги Мобильный интернет автора Леонтьев Виталий Петрович

Дефрагментация жесткого диска После выполнения предыдущей операции наш компьютер счастливо ушел на перезагрузку... И я очень надеюсь, что после загрузки ваша Windows будет работать хоть чуточку быстрее. Но в качестве завершающего удара мы должны выполнить еще одну,


9.5.2. Форматирование жесткого диска

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

9.5.2. Форматирование жесткого диска Низкоуровневое форматирование жесткого диска под Linux невозможно. Впрочем, в этом нет особой необходимости, поскольку современные диски выпускаются отформатированными на низком уровне.Форматирование на высоком уровне заключается в


Выход из строя жесткого диска

Из книги Сбои и ошибки ПК. Лечим компьютер сами. Начали! автора Ташков Петр

Выход из строя жесткого диска Жесткий диск (рис. 1.10) – устройство для постоянного хранения данных, необходимых для нормальной работы компьютера. Со временем на жестком диске, кроме установленных программ, накапливается достаточно большое количество документов и других


Подготовка жесткого диска

Из книги Железо ПК [Популярный самоучитель] автора Пташинский Владимир

Подготовка жесткого диска В данном разделе мы узнаем, что нужно сделать с новым (чистым) жестким диском, прежде чем устанавливать на него операционную систему.Чтобы любая операционная система узнавала винчестер и могла с ним работать, необходимо последовательно


4.18. Повышение производительности жесткого диска

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

4.18. Повышение производительности жесткого диска Существенно повысить производительность жесткого диска поможет программа hdparm. Я увеличил скорость операции чтения своего жесткого диска Quantum Fireball ATA66 с 3,75 Мб/с до 14 Мб/с, а жесткий диск IBM АТА100 (модель точно не помню) удалось


2.2.4. Выбор жесткого диска

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

2.2.4. Выбор жесткого диска На сегодняшний день нужно ориентироваться на объем 160–200 Гб, чтобы встала Windows Vista и все необходимое. Это то, что вам пока реально понадобится. Покупать жесткие диски размером в 500–750 Гб смысла пока нет — через год они будут дешевле.В продаже все еще


Профилактика жесткого диска

Из книги Установка и настройка Windows XP. Легкий старт автора Донцов Дмитрий

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


1.1. Подготовка жесткого диска

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

1.1. Подготовка жесткого диска Сейчас на вашем компьютере установлена, скорее всего, одна из ОС семейства Windows со своей файловой системой. ОС Linux использует другой тип файловой системы, поэтому для ее установки вы должны освободить место на диске и отформатировать его (т.е.


1.2.3. С использованием жесткого диска

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

1.2.3. С использованием жесткого диска Если вы скачали образы компакт-дисков дистрибутива, то можете прожечь их на CD и устанавливать так, как сказано в п. 1.2.1. Когда скорость вашего CD-привода слишком мала (например, 4x), имеет смысл разместить ISO-образы на жестком диске, а с CD


23.3.1. Отказы жесткого диска

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

23.3.1. Отказы жесткого диска Причина отказа жесткого диска кроется в ненадежной электронике или некачественном носителе (магнитных дисках, на которых, собственно, и хранится информация). На самом деле, что конкретно в винчестере вышло из строя, — не так важно, все равно


Повреждения жесткого диска

Из книги Самоучитель работы на компьютере: быстро, легко, эффективно автора Гладкий Алексей Анатольевич

Повреждения жесткого диска К такому же печальному результату могут привести повреждения жесткого диска (появление bad sectors) и нехватка дискового пространства в момент расширения базы данных. В последнем случае может произойти очень неприятная вещь: InterBase укажет на